为什么MSBuild不执行多个目标?

16 msbuild teamcity

我在一个xml文件中设置了多个目标.我希望所有目标都能运行,但只有frist目标才能执行.

这是iam尝试做的简化版本:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="T1">
    <Copy SourceFiles="c:\temp\a.txt" DestinationFolder="C:\temp2\" />    
  </Target>
  <Target Name="T2">
    <Copy SourceFiles="c:\temp\b.txt" DestinationFolder="C:\temp2\" />    
  </Target>
</Project>
Run Code Online (Sandbox Code Playgroud)

我从TeamCity CI服务器运行构建,日志报告处理退出代码:0.

任何人都有任何想法为什么它不运行T2?

Mit*_*eat 29

您需要告诉MSBuild您的多个目标

尝试

<Target Name="Build" DependsOnTargets="T1; T2">
</Target>
Run Code Online (Sandbox Code Playgroud)

  • 感谢指针,实际上我通过指定来实现它:<Target Name ="T2"AfterTargets ="T1"> (2认同)

geo*_*ane 18

MSBuild允许您定义默认目标,它允许您定义目标之间的依赖关系.如果没有定义默认值,则它会运行它找到的第一个默认值.使用DefaultTargets可以调用多个:

<Project DefaultTargets="T1;T2">
Run Code Online (Sandbox Code Playgroud)

目标应完成一个明确定义的步骤.例如,Clean目标将删除清理项目所需的所有必要文件和文件夹.编译将编译所有DLL等.

您的目标通常应声明自己的依赖项:

<Target Name="CI" DependsOnTargets="T1, T2">
</Target>
Run Code Online (Sandbox Code Playgroud)

否则,您的目标应包含您要运行的所有单个步骤:

<Target Name="XX">
    <CallTarget Targets="T1"/>
    <CallTarget Targets="T2"/>
</Target>
Run Code Online (Sandbox Code Playgroud)