<UsingTask TaskName="FooTask" AssemblyFile="..\Task\bin\$(Configuration)\Task.dll"/>
<Target Name="RunFooTask" BeforeTargets="Compile">
<FooTask/>
</Target>
这主要是有效的。但是经常构建测试项目会使任务项目构建.DLL由MSBUILD和/或Visual Studio锁定,这需要杀死Rogue MSBUILD过程并重新启动Visual Studio。这听起来类似于Visual Studio 2008 Locks自定义MSBUILD任务组件和Visual Studio 2008 lock dll in bin文件夹中的dll,并且不放开IT。但是我的任务已经是一个
AppDomainIsolatedTask
,我已经尝试设置GenerateResourceNeverLockTypeAssemblies
。这无法解决问题。
因此,我尝试将测试项目中的项目参考添加到目标项目中,以为它会将.dll复制到测试项目中,并且可以在此处找到它:
UsingTask
thishisshiss
可以解决问题,以解决.dll被锁定的问题。现在的问题是,在调用任务时尚未复制.dll。如果我正确理解,
<UsingTask TaskName="FooTask" AssemblyFile="$(OutputPath)Task.dll" />
表示编译之前的任何时间,不一定在编译之前。因此,我认为我还需要用参考项目中的.dll副本来指定
BeforeTargets="Compile"
。 那是什么目标?
,我还尝试将AfterTargets
更改为BeforeTargets="Compile"
。现在,在任务运行之前,将.dll复制,但这是因为它运行了
我将其归结为一个不涉及的测试目标:
BeforeTargets="Build"
输出:
UsingTask
这让我怀疑我以为我知道发生了什么的一切。
<Target Name="Hello" BeforeTargets="Build">
<Message Importance="high" Text="Hello" />
</Target>