如何在MSBuild中使用目标的“输出”参数

5

我正在尝试理解一些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>

当然它不起作用。

2个回答

12

除了一些元素大小写语法错误(即target->Target)之外,还需要修复两个主要问题才能使其正常工作:
1)TaskParameter属性应设置为“TargetOutputs”
2)子目标的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

8

1
谢谢,我已经阅读了所有的文档。但是我不理解其中的任何词语...也许你可以给我一个我正在尝试做的例子? - Pitming_Reloaded
你想做什么?如果你想调用一些能够为你设置属性的东西,那么你可以编写一个直接设置属性的目标或编写一个自定义任务,该任务设置输出,这些输出将通过任务下的Output元素复制到你的属性中,就像答案中的Simple Example链接一样。 - Brian Walker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接