2009-09-03 39 views
28

我想計算一個MsBuild任務中的路徑,以供另一個MsBuild任務使用。 完成此操作的最佳方法是什麼?從MsBuild任務返回輸出?

設置環境變量,打印到控制檯,...?

回答

42

使用屬性或項目。您的MSBuild計算路徑,將其作爲屬性返回,並將此屬性用作其他任務的輸入。

public class CalculatePathTask : ITask 
{ 
    [Output] 
    public String Path { get; set; } 

    public bool Execute() 
    {         
     Path = CalculatePath(); 

     return true; 
    } 
} 
<Target Name="CalculateAndUsePath"> 
    <CalculatePathTask> 
    <Output TaskParameter="Path" PropertyName="CalculatePath"/> 
    </CalculatePathTask> 

    <Message Text="My path is $(CalculatePath)"/> 
</Target> 

如果你需要傳遞兩個MSBuild項目之間的值,你應該創建一個第三個將使用MSBuild任務撥打對方,並使用TargetOutputs元素找回價值,你想。

+2

只是一個簡短的說明:在我的情況下'ItemName'不工作。只要我將它改爲「PropertyName」,它就像一個魅力一樣。 – sebagomez 2011-11-26 03:12:53

+0

嘗試了此操作,但是「MyCustomTask」任務不支持「TaskParameter」參數。驗證任務中是否存在參數,並且它是一個可設置的公共實例屬性 – jpierson 2017-02-06 20:38:16