我正在尝试将变量从一个目标输出到启动它的父目标。例如,
目标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任务很陌生,所以它很可能是显而易见的。我想要做的就是在一个任务中设置一个变量,然后在调用它的父任务中使用它。
答案 0 :(得分:5)
朱利安给了你正确的答案,但没有解释为什么它是正确的。
由于你是msbuild任务的新手,我将解释为什么Julien的答案是正确的。
msbuild中的所有任务都有参数 - 您将把它们视为您在任务中添加的属性。可以通过在其中放置Output元素来读取这些参数中的任何一个。 Output元素有3个可以使用的属性
在原始脚本上,您正在调用另一个脚本。第二个脚本将在不同的上下文中执行,因此它设置的任何属性或项目组仅存在于该上下文中。因此,当第二个脚本完成时,除非您指定了一些输出元素来捕获值,否则它们将被丢弃。
请注意,您可以在任务下放置多个Output元素以捕获多个参数,或者只将相同的值设置为多个属性/项目组。
答案 1 :(得分:4)
您必须使用TargetOutputs
任务的MSBuild
:
<Target Name="RetrieveParameter">
<MSBuild Projects="$(MSBuildProjectFile)" Targets="ObtainOutput">
<Output TaskParameter="TargetOutputs" ItemName="OutputVar"/>
</MSBuild>
<Message Text="Output = @(OutputVar)" />
</Target>
(关于MSBuild task的更多信息)。