【问题标题】:Why does MSBuild not execute multiple targets?为什么 MSBuild 不执行多个目标?
【发布时间】:2010-11-09 22:04:24
【问题描述】:

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

这是我正在尝试做的简化版本:

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

我正在从 TeamCity CI 服务器运行构建,并且日志报告进程退出代码:0。

有人知道为什么它不运行 T2 吗?

【问题讨论】:

    标签: msbuild teamcity


    【解决方案1】:

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

    试试

    <Target Name="Build" DependsOnTargets="T1; T2">
    </Target>
    

    【讨论】:

    • 感谢您的指点,实际上我通过指定:
    • 请注意,依赖的目标应该用分号分隔,而不是如图所示的逗号。例如。
    【解决方案2】:

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

    <Project DefaultTargets="T1;T2">
    

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

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

    <Target Name="CI" DependsOnTargets="T1, T2">
    </Target>
    

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

    <Target Name="XX">
        <CallTarget Targets="T1"/>
        <CallTarget Targets="T2"/>
    </Target>
    

    【讨论】:

      【解决方案3】:

      MSBuild 使用此顺序来确定应执行的目标。一旦找到一个值,它就会停在那里并开始执行。

      • 您使用 msbuild.exe 上的 /t 开关指定的目标
      • Project 元素的 DefaultTargets 属性中包含的目标
      • 在构建脚本中找到的第一个目标(实际上稍微复杂一些

      正如前面的评论者所说,您可以使用 DependsOnTargets 列表让其他目标在该目标之前先执行。

      关于您的解决方案,AfterTargets 仅在 MSBuild 4.0 中可用,因此不适用于以前的版本。

      赛义德·易卜拉欣·哈希米

      我的书:Inside the Microsoft Build Engine : Using MSBuild and Team Foundation Build

      【讨论】:

        【解决方案4】:

        或者,您可以创建一个定义所有依赖目标的属性组:

         <PropertyGroup>
                <BuildDependsOn>T1;T2</BuildDependsOn>
         </PropertyGroup>
        

        然后将BuildDependsOn的值作为参数传入如下图:

        <Target Name="Build" DependsOnTargets="@(BuildDependsOn)"/>
        

        此方法允许在此项目文件之外修改依赖列表以注入其他必需的步骤。请参阅此site 了解更多信息。

        【讨论】:

          猜你喜欢
          • 2019-06-13
          • 1970-01-01
          • 2016-11-03
          • 1970-01-01
          • 2012-10-05
          • 2020-03-17
          • 2011-04-12
          • 1970-01-01
          相关资源
          最近更新 更多