如何将计算的MSBuild属性传递给正在构建的项目?

时间:2013-05-28 08:34:55

标签: msbuild

我正在尝试将计算出的属性值从TFS proj文件传递到正在构建的解决方案的csproj文件中,但它始终是未经修改的值。我怀疑它是一个任务订购问题,但我不确定。什么时候sln读取属性值?

我的proj文件的缩减版本是:

<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。

任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

解决了!

在solutiontobuild中传递属性仅适用于静态属性。动态属性不能以这种方式传递,而是在目标中声明它们被修改如下:

<Target Name="BeforeEndToEndIteration">

  <!-- modifying code -->

  <PropertyGroup>
    <CustomPropertiesForBuild>$(CustomPropertiesForBuild);ProductBuildNumber=$(ProductBuildNumber)</CustomPropertiesForBuild>
  </PropertyGroup>
</Target>