【问题标题】:MSBuild conditional Exec?MSBuild 条件执行?
【发布时间】:2011-04-27 02:14:30
【问题描述】:

我正在使用

我注意到该项目仅根据需要构建,并在运行构建脚本时获得以下输出:“跳过目标“CoreCompile”,因为所有输出文件都是最新的”。这很好,但我如何让我的

更新:我已经实施了 gregmac 的建议,但无论如何它仍在执行命令。这就是我现在得到的:

<Target Name="Name">
<MSBuild Projects="">
    <Output TaskParameter="TargetOutputs" ItemName="AssembliesBuiltByChildProjects" />
</MSBuild>
<Exec Command="" Condition="'@(AssembliesBuiltByChildProjects)'!=''" />

非常感谢任何进一步的帮助。这对我来说有点棘手。

感谢任何提示。

艾伦

【问题讨论】:

    标签: post msbuild build conditional


    【解决方案1】:

    你应该可以使用TargetOutputs parameter:

    <MSBuild Projects="" >
       <Output TaskParameter="TargetOutputs" ItemName="AssembliesBuiltByChildProjects" />
    </MSBuild>
    <Message Text="Assemblies built: @(AssembliesBuiltByChildProjects)" /> <!-- just for debug -->
    <Exec Command="" Condition="'@(AssembliesBuiltByChildProjects)'!=''" />
    

    【讨论】:

    • 您好,感谢您的建议,很抱歉延迟回复。我现在正准备尝试这个。我已经尝试过了,但无论项目是否构建,它仍在执行命令。请参阅我更新的问题。有什么想法吗?
    • 进一步研究后,我可以看到 AssembliesBuiltByChildProjects 确实包含我的程序集的名称。但是,这个值不管建不建项目都没有区别……这有点让人沮丧,因为它是如此接近。谁能解释一下?
    【解决方案2】:

    如果您可以在每个项目中添加以下内容:

    <Target Name="DoStuffWithNewlyCompiledAssembly">
        <Exec Command="" />
    </Target>
    

    ...那么你只需要添加一个属性:

    <Target Name="Name">
      <MSBuild Projects="" Properties="TargetsTriggeredByCompilation=DoStuffWithNewlyCompiledAssembly" />
    </Target>
    

    之所以可行,是因为 Microsoft 的某个聪明人在 Microsoft.[CSharp|VisualBasic][.Core].targets 中的 CoreCompile 目标末尾添加了以下行(文件名取决于语言和 MSBuild/Visual Studio 版本)。

    <CallTarget Targets="$(TargetsTriggeredByCompilation)" Condition="'$(TargetsTriggeredByCompilation)' != ''"/>
    

    因此,如果您在TargetsTriggeredByCompilation 属性中指定目标名称,则如果CoreCompile 运行,您的目标将运行- 如果跳过CoreCompile,您的目标将不会运行(例如,因为输出程序集已经启动-迄今为止关于代码)。

    【讨论】:

      【解决方案3】:

      我确实设法找到了适合我需要的解决方案,尽管它可能不是最佳解决方案。

      在此处查看我对其他问题的回答:MSBuild Post-Build

      谢谢, 艾伦

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-12
        • 1970-01-01
        • 1970-01-01
        • 2012-12-25
        相关资源
        最近更新 更多