2010-06-03 120 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