代码之家  ›  专栏  ›  技术社区  ›  StackOverthrow

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

  •  0
  • StackOverthrow  · 技术社区  · 6 年前

    我正在尝试开发一个自定义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
    

    这让我怀疑我所知道的一切。

    0 回复  |  直到 6 年前