【问题标题】:How to use an 'Output' parameter from a target in MSBuild如何在 MSBuild 中使用目标中的“输出”参数
【发布时间】:2011-02-22 13:29:42
【问题描述】:

我正在尝试了解一些 MSBuild 概念(我熟悉 NAnt)。

我尝试在一个目标中初始化一些属性,然后在另一个中使用它。这是一个例子:

<propertygroup>
    <MyProp>X</MyProp>
</propertygroup>

<target name="Main">
    <message text="$(MyProp)"/> <!-- Display 'X' -->
    <CallTarget Target="Sub">
        <Output TaskParameter="localProp" PropertyName="MyProp"/>
    </CallTarget>
    <message text="$(MyProp)"/> <!-- should display 'Y' -->
</target>

<target name="Sub" Outputs=$(localProp)>
    <propertygroup>
        <localProp>Y</localProp>
    </propertygroup>
</target>

当然不行。

【问题讨论】:

    标签: msbuild


    【解决方案1】:

    除了元素大小写中的一些小语​​法错误(即目标->目标)之外,还有两个主要问题需要修复才能使其正常工作:
    1) TaskParameter 属性应设置为“TargetOutputs”
    2)Sub目标的Outputs属性需要用引号括起来

    这是一个工作示例:

    <?xml version="1.0" encoding="utf-8"?>
    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Main">
    
        <PropertyGroup>
            <MyProp>X</MyProp>
        </PropertyGroup>
    
        <Target Name="Main">
            <Message text="$(MyProp)"/> <!--display 'X'-->
            <CallTarget Targets="Sub">
                <Output TaskParameter="TargetOutputs" PropertyName="MyProp"/>
            </CallTarget>
            <Message text="$(MyProp)"/> <!-- should display 'Y'-->
        </Target>
    
        <Target Name="Sub" Outputs="$(localProp)">
            <PropertyGroup>
              <localProp>Y</localProp>
            </PropertyGroup>
        </Target>
    </Project>
    

    以上输出:

    Microsoft (R) Build Engine version 4.6.1055.0
    [Microsoft .NET Framework, version 4.0.30319.42000]
    Copyright (C) Microsoft Corporation. All rights reserved.
    
    Build started 5/6/2016 9:51:37 AM.
    Project "C:\workspace\dev\msbuild\temp.msbuild" on node 1 (default targets).
    Main:
      X
      Y
    Done Building Project "C:\workspace\dev\msbuild\temp.msbuild" (default targets).
    
    Build succeeded.
        0 Warning(s)
        0 Error(s)
    
    Time Elapsed 00:00:00.07
    

    【讨论】:

      【解决方案2】:

      您将目标上定义的输出与任务的输出参数混淆了。

      目标的输出用于依赖分析:

      MSBuild Target Element

      MSBuild Transforms - Dependency Analysis

      Task的Output参数用于返回数据:

      Simple Example Here

      【讨论】:

      • 谢谢,我已经阅读了所有文档。但我听不懂里面的任何文字......也许你可以给我一个我正在尝试做的事情的例子?
      • 你想做什么?如果您想调用将为您设置一些属性的东西,那么您可以编写一个直接设置属性的目标,或者编写一个自定义任务来设置输出,这些输出使用任务下的输出元素(例如简单示例链接)复制到您的属性中在答案中。
      猜你喜欢
      • 1970-01-01
      • 2010-11-20
      • 2021-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-21
      • 1970-01-01
      相关资源
      最近更新 更多