MSBuild任务执行外部MSBuild文件

时间:2009-10-01 04:47:32

标签: msbuild

我正在尝试设置一个MSBuild文件,该文件将调用另一个MSBuild文件,我想知道实现此目的的最佳方法是什么。

我们在构建服务器下载MSBuild文件的场景中使用它,然后根据参数执行相应的第二个文件。

我知道我可以使用<Exec Command="msbuild.exe ..." />任务,但这似乎是一种 hacky 方式。

是否有更简单的方法可以使用MSBuild执行另一个MSBuild文件?

4 个答案:

答案 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>