2013-05-28 30 views
0

我想從TFS proj文件傳遞一個計算的屬性值到正在構建的解決方案的csproj文件中,但它始終是傳遞的未修改的值。我懷疑它的任務排序問題,但我不確定。具體什麼時候sln讀取屬性值?如何將計算的MSBuild屬性傳遞給正在構建的項目?

我凸出文件的削減版本是:

<PropertyGroup> 
    <ProductMajorVersion>4</ProductMajorVersion> 
    <ProductMinorVersion>5</ProductMinorVersion> 
    <ProductBuildNumber>0</ProductBuildNumber> 
    <ProductUpdateVersion>0</ProductUpdateVersion> 
</PropertyGroup> 

<Target Name="BeforeEndToEndIteration"> 

    <!-- Calculate changeset number --> 
    <MSBuild.Community.Tasks.Tfs.TfsClient ToolPath="C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE" 
           Command="history /s:$(TFSPath) /stopafter:1 /format:detailed /version:T $/mobile/main" 
           Recursive="true"> 
    <Output TaskParameter="Changeset" PropertyName="ProductBuildNumber"/> 
    </MSBuild.Community.Tasks.Tfs.TfsClient> 

    <Message Text="TFS ChangeSetNumber: $(ProductBuildNumber)" /> 

</Target> 

<ItemGroup> 
    <SolutionToBuild Include="$(BuildProjectFolderPath)/../../Main/BuildAll.sln"> 
    <Targets></Targets> 
    <Properties>ProductMajorVersion=$(ProductMajorVersion);ProductMinorVersion=$(ProductMinorVersion);ProductBuildNumber=$(ProductBuildNumber);ProductUpdateVersion=$(ProductUpdateVersion)</Properties> 
    </SolutionToBuild> 
</ItemGroup> 

消息正確輸出修改ProductBuildNumber但我的SLN文件仍然把它讀成0

任何人可以幫助?

+0

文件中的順序並不表示執行順序。總是困惑。 – jessehouwing

回答

0

解決了它!

傳遞solutiontobuild中的屬性僅適用於靜態屬性。動態屬性不得以這種方式傳遞,而應在目標中聲明它們的修改方式如下:

<Target Name="BeforeEndToEndIteration"> 

    <!-- modifying code --> 

    <PropertyGroup> 
    <CustomPropertiesForBuild>$(CustomPropertiesForBuild);ProductBuildNumber=$(ProductBuildNumber)</CustomPropertiesForBuild> 
    </PropertyGroup> 
</Target> 
相關問題