2013-05-28 31 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> 
相关问题