2010-06-03 130 views
3

我试图从一个目标输出变量到启动它的父目标。例如,输出MSBuild变量时遇到问题

目标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任务很陌生,所以很可能是很明显的。我想要做的就是在一个任务中设置一个变量,然后在调用它的父任务中使用该变量。

回答

4

你必须使用TargetOutputsMSBuild任务:

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

(上MSBuild task更多信息)。

5

朱利安给了你正确的答案,但没有解释为什么它是正确的。

当你刚接触msbuild任务时,我会解释为什么朱利安的答案是正确的。

msbuild中的所有任务都有参数 - 您将了解它们作为您在任务中放置的属性。通过在其中放置一个Output元素,可以读出任何这些参数。输出元素有3个属性,可以用来

  • TaskParameter - 这是你想要得到
  • ITEMNAME任务属性/参数的名称 - 这是把该参数值入的ItemGroup
  • 属性名 - 这是属性的名称,以把该参数值到

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

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

+1

+1的阐述。 – 2013-11-05 09:34:45