2012-05-14 27 views
2

如何在msbuild中創建屬性以便我可以在CallTarget指令中使用它?在msbuild中動態創建屬性以用於calltarget子目標

本質上我試圖調用一個目標'子程序',其中的屬性作爲參數。

我試着製作一個玩具csproj文件,它試圖創建一個屬性,然後調用一個可以迴應它的目標。它回聲無效。

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="Test"> 
    <CreateProperty Value="AAA"> 
     <Output TaskParameter="Value" PropertyName="Foo" /> 
    </CreateProperty> 
    <CallTarget Targets="Test2" /> 
    </Target> 
    <Target Name="Test2"> 
    <Message Text="Target Test2: Foo=$(Foo)" /> 
    </Target> 
</Project> 

運行msbuild TestProj.csproj /t:Test輸出:

Test: 
    Target Test: Foo=AAA 
Test2: 
    Target Test2: Foo= 

我想這個問題是我在命令式的方式思考的MSBuild(這顯然是一個常見的錯誤),所以我希望有人可以糾正在msbuild的工作方式中似乎是一個非常根本的誤解。

回答

1

您可以使用目標屬性DependsOnTarget來獲取從任務傳遞給任務的屬性。

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="Test"> 
    <CreateProperty Value="AAA"> 
     <Output TaskParameter="Value" PropertyName="Foo" /> 
    </CreateProperty> 
    </Target> 
    <Target Name="Test2" DependsOnTargets="Test"> 
    <Message Text="Target Test2: Foo=$(Foo)" /> 
    </Target> 
</Project> 

剛剛稱之爲第二個目標。

+0

感謝您的建議。不幸的是,這個子目標可以被其他一些目標所調用,所以目標實際上並不知道它是什麼。這可能是我再次濫用msbuild的神器.. – fostandy

+0

yup任務不是功能... –