输出MSBuild变量时遇到问题
问题描述:
我试图从一个目标输出变量到启动它的父目标。例如,输出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任务很陌生,所以很可能是很明显的。我想要做的就是在一个任务中设置一个变量,然后在调用它的父任务中使用该变量。
答
你必须使用TargetOutputs
的MSBuild
任务:
<Target Name="RetrieveParameter">
<MSBuild Projects="$(MSBuildProjectFile)" Targets="ObtainOutput">
<Output TaskParameter="TargetOutputs" ItemName="OutputVar"/>
</MSBuild>
<Message Text="Output = @(OutputVar)" />
</Target>
(上MSBuild task更多信息)。
答
朱利安给了你正确的答案,但没有解释为什么它是正确的。
当你刚接触msbuild任务时,我会解释为什么朱利安的答案是正确的。
msbuild中的所有任务都有参数 - 您将了解它们作为您在任务中放置的属性。通过在其中放置一个Output元素,可以读出任何这些参数。输出元素有3个属性,可以用来
- TaskParameter - 这是你想要得到
- ITEMNAME任务属性/参数的名称 - 这是把该参数值入的ItemGroup
- 属性名 - 这是属性的名称,以把该参数值到
在原来的剧本,你调用一个从其他。第二个脚本将在不同的上下文中执行,因此它所设置的任何属性或项目组仅存在于该上下文中。因此,当第二个脚本完成时,除非您指定了一些Output元素来捕获值,否则它们将被丢弃。
请注意,您可以在一个任务下放置多个Output元素来捕获多个参数,或者将相同的值设置为多个属性/项目组。
+1的阐述。 – 2013-11-05 09:34:45