执行外部MSBuild文件的MSBuild任务

9
我正在尝试设置一个MSBuild文件,它将调用另一个MSBuild文件,我想知道实现这一点的最佳方法是什么。
我们将其应用于构建服务器下载MSBuild文件的场景,然后根据参数执行相应的第二个文件。
我知道我可以使用任务,但这似乎是一个有点hacky的方法。
是否有更简单的方法使用MSBuild来执行另一个MSBuild文件?
4个回答

13

你可以使用 MSBuild任务 在另一个MSBuild项目中构建目标。

你也可以将目标放在外部的 .targets 文件中,然后由两个MSBuild项目导入并使用CallTarget任务 来构建它。

更新:要执行外部命令,请使用Exec任务


啊!我知道一定有更好的方法。我以前没有接触过 MSBuild 的任务 :) - Aaron Powell
1
你如何使用MSBuild任务来执行外部文件? 你能展示一下怎么做吗? - Adam Oren

7

使用<MSBuild>任务而不是<Exec Command="msbuild.exe .."/>不仅更美观,而且意味着单个MSBuild进程了解正在构建的所有项目,并且没有冲突;特定项目不能同时由两个线程构建。如果您使用“/m”进行构建,则通常至关重要。

还有其他优点,例如整个构建过程只需要一个记录器。


3

回复Adam Oren的评论: 这里有一个执行外部文件的例子 - 在这种情况下,它启动了nunit。 %22是为了转义,它表示“,所以你可以在可执行路径中有空格。

<Exec Command="%22$(NUnit_Install_Directory)bin\net-2.0\nunit-console.exe%22 
/noshadow @(TestableAssemblies, ' ') /xml 
 $(BuildFilesPath)\NCover-NUnit-Results.xml" /> 

您不必像我一样使用变量,但我发现这样可以使您的脚本更具可移植性。 $(NUnit_Install_Directory)被定义为

<PropertyGroup> 
   <NUnit_Install_Directory>c:\Program Files\NUnit 2.5.3\</NUnit_Install_Directory> 


0
<Target Name="TA">
    <CallTarget Targets="TB"/>
</Target>

<Target Name="TB">
    <Message Text="TB..." />
</Target>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接