【问题标题】:Trouble with outputting MSBuild variables输出 MSBuild 变量的问题
【发布时间】:2010-06-03 16:54:07
【问题描述】:

我正在尝试将变量从一个目标输出到启动它的父目标。例如,

目标 1 只是调用文件 2 中的任务,并且应该能够使用其中设置的变量。但是,我似乎无法让它工作(也许语法错误?)。目标 1 如下所示:

<Target Name="RetrieveParameter">
    <MSBuild Projects="$(MSBuildProjectFile)" Targets="ObtainOutput" />
    <Message Text="Output = $(OutputVar)" />
</Target>

目标 2 是它读取文本文件的值并将其设置为属性并设置变量“OutputVar”以匹配的位置。这应该返回给父级。

<Target Name="ObtainOutput" Outputs="$(OutputVar)">
    <ReadLinesFromFile File="output.txt">
        <Output TaskParameter="Lines"
                PropertyName="OutputVar" />
    </ReadLinesFromFile>
</Target>

我对 MSBuild 任务很陌生,所以这很可能是显而易见的。我要做的就是在一个任务中设置一个变量,然后在调用它的父任务中使用它。

【问题讨论】:

    标签: msbuild msbuild-task


    【解决方案1】:

    Julien has given you the right answer,但没有解释为什么它是正确的。

    由于您是 MSBuild 任务的新手,我将解释为什么 Julien 的答案是正确的。

    MSBuild 中的所有任务都有参数 - 您将知道它们是您赋予任务的属性。这些参数中的任何一个都可以通过在其中放置Output 元素来读取。 Output 元素具有三个可以使用的属性:

    • TaskParameter - 这是您想要获取的任务的属性/参数的名称
    • ItemName - 这是将该参数值放入的项目组
    • PropertyName - 这是将该参数值放入的属性的名称

    在您的原始脚本中,您正在调用另一个脚本。第二个脚本将在不同的上下文中执行,因此它设置的任何属性或项组仅存在于该上下文中。因此,当第二个脚本完成时,除非您指定了一些 Output 元素来捕获值,否则它们将被丢弃。

    请注意,您可以在一项任务下放置多个Output 元素以捕获多个参数,或者将相同的值设置为多个属性/项目组。

    【讨论】:

      【解决方案2】:

      你必须使用TargetOutputs任务的TargetOutputs

       <Target Name="RetrieveParameter">
         <MSBuild Projects="$(MSBuildProjectFile)" Targets="ObtainOutput">
           <Output TaskParameter="TargetOutputs" ItemName="OutputVar"/>
         </MSBuild>
         <Message Text="Output = @(OutputVar)" />
       </Target>
      

      (有关MSBuild task的更多信息。)

      【讨论】:

        猜你喜欢
        • 2011-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-09
        • 2021-12-18
        • 2017-12-11
        • 1970-01-01
        相关资源
        最近更新 更多