输出MSBuild变量时出现问题

输出MSBuild变量时出现问题,msbuild,msbuild-task,Msbuild,Msbuild Task,我试图将变量从一个目标输出到启动它的父目标。比如说, 目标1只是调用文件2中的任务,并且应该能够使用其中的变量集。然而,我似乎无法让它工作(可能语法错误?)。目标1如下所示: <Target Name="RetrieveParameter"> <MSBuild Projects="$(MSBuildProjectFile)" Targets="ObtainOutput" /> <Message Text="Output = $(OutputVar)"

我试图将变量从一个目标输出到启动它的父目标。比如说,

目标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
任务的
targetOutput

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

(有关的详细信息。)

,但未解释其正确性

由于您不熟悉MSBuild任务,我将解释为什么Julien的答案是正确的

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

  • TaskParameter—这是要获取的任务属性/参数的名称
  • ItemName-这是要将该参数值放入的itemgroup
  • PropertyName-这是要将该参数值放入的属性的名称
在原始脚本中,您从一个脚本调用另一个脚本。第二个脚本将在不同的上下文中执行,因此它设置的任何属性或项目组都只存在于该上下文中。因此,当第二个脚本完成时,除非您指定了一些
Output
元素来捕获值,否则它们将被丢弃

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