哪个MSBuild目标从项目引用中复制.dll?

时间:2018-11-26 19:24:17

标签: msbuild

我正在尝试开发自定义MSBuild任务,并通过从同一解决方案的另一个项目中调用它来对其进行测试。最初,我在测试项目中设置UsingTask来引用任务项目中的.dll:

<UsingTask TaskName="FooTask" AssemblyFile="..\Task\bin\$(Configuration)\Task.dll"/>
<Target Name="RunFooTask" BeforeTargets="Compile">
    <FooTask/>
</Target>

多数情况下有效。但是构建测试项目经常且看似随意,但使任务项目.dll被MSBuild和/或Visual Studio锁定,这需要终止恶意的MSBuild进程并重新启动Visual Studio。这听起来类似于Visual Studio 2008 locks custom MSBuild Task assembliesVisual Studio 2008 locks dll in bin folder and doesn't let go of it。但是我的任务已经是AppDomainIsolatedTask,并且我尝试设置GenerateResourceNeverLockTypeAssemblies。这不能解决问题。

因此,我尝试将测试项目中的项目引用添加到目标项目,以为它将.dll复制到测试项目中,UsingTask可以在其中找到它:

<UsingTask TaskName="FooTask" AssemblyFile="$(OutputPath)Task.dll" />

似乎用于解决.dll处于锁定状态的问题。现在的问题是,调用任务时尚未复制.dll。如果我理解正确,BeforeTargets="Compile"表示在编译之前的任何时间,而不一定在编译之前。因此,我认为我还需要指定AfterTargets,无论目标是从引用的项目中复制.dll还是目标。 那是什么目标?

偶然地,我也尝试将BeforeTargets="Compile"更改为BeforeTargets="Build"。现在,.dll是在任务运行之前复制的,但这是因为它在生成后 之后运行!我将其归结为完全不涉及UsingTask的测试目标:

<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

这使我怀疑我以为我对所发生的一切了解。

0 个答案:

没有答案