我正在尝试开发一个自定义MSBuild任务,并通过从同一解决方案中的另一个项目调用它来测试它。最初是我建立的
UsingTask
<UsingTask TaskName="FooTask" AssemblyFile="..\Task\bin\$(Configuration)\Task.dll"/>
<Target Name="RunFooTask" BeforeTargets="Compile">
<FooTask/>
</Target>
这主要是有效的。但是,生成测试项目通常是随机的,任务project.dll会被MSBuild和/或Visual Studio锁定,这需要杀死恶意MSBuild进程并重新启动Visual Studio。这听起来很像
Visual Studio 2008 locks custom MSBuild Task assemblies
和
Visual Studio 2008 locks dll in bin folder and doesn't let go of it
. 但我的任务已经很艰巨了
AppDomainIsolatedTask
我也试过了
GenerateResourceNeverLockTypeAssemblies
. 这并不能解决问题。
因此,我尝试将一个项目引用从测试项目添加到目标项目中,认为它会将.dll复制到测试项目中并
使用任务
你可以在那里找到它:
<UsingTask TaskName="FooTask" AssemblyFile="$(OutputPath)Task.dll" />
似乎
解决.dll被锁定的问题。现在的问题是调用任务时尚未复制.dll。如果我理解正确的话,
BeforeTargets="Compile"
AfterTargets
使用任何目标从引用的项目复制.dll。
那将是什么目标?
顺便说一句,我也试着改变
到
BeforeTargets="Build"
. 现在,在任务运行之前复制.dll,但这是因为它正在运行
完全:
<Target Name="Hello" BeforeTargets="Build">
<Message Importance="high" Text="Hello" />
</Target>
1>------ Rebuild All started: Project: Test, Configuration: Debug Any CPU ------
1> Test -> C:\[redacted]\MSBuildTest2\Test\bin\Debug\Test.exe
1> Hello
这让我怀疑我所知道的一切。