我正在尝试设置一个MSBuild文件,该文件将调用另一个MSBuild文件,我想知道实现此目的的最佳方法是什么。
我们在构建服务器下载MSBuild文件的场景中使用它,然后根据参数执行相应的第二个文件。
我知道我可以使用<Exec Command="msbuild.exe ..." />
任务,但这似乎是一种 hacky 方式。
是否有更简单的方法可以使用MSBuild执行另一个MSBuild文件?
答案 0 :(得分:13)
您可以使用MSBuild task
在另一个MSBuild项目中构建目标。
您还可以将目标放在由两个MSBuild项目导入的外部.targets文件中,并使用CallTarget task
来构建它。
更新:要执行外部命令,请使用Exec task
。
答案 1 :(得分:7)
使用<MSBuild>
任务而不是<Exec Command="msbuild.exe .."/>
不仅更漂亮。这意味着单个MSBuild进程知道正在构建的所有项目,并且没有冲突;一个特定的项目不能同时由两个线程构建。如果你用“/ m”构建,这通常是至关重要的。
还有一些其他优点,例如整个构建中有一组记录器。
答案 2 :(得分:2)
回应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>
答案 3 :(得分:0)
<Target Name="TA">
<CallTarget Targets="TB"/>
</Target>
<Target Name="TB">
<Message Text="TB..." />
</Target>