MSBuild:如何使用相同来源的不同版本制作多个版本?

时间:2012-10-04 10:43:32

标签: msbuild msbuildextensionpack

我有一个MSBuild * .proj文件,用于构建我的解决方案并使用变更集编号设置构建版本。
现在我需要制作相同解决方案的两个版本,其中一个区别是: 第一个的版本应该是“5.0.0。{chanset_number}”,但第二个版本 - “2.0.0。{chanset_number}”。

我使用下面的代码来获取一个数字最新的变更集和设置版本的版本:

<ItemGroup>
  <FilesToVersion Include="$(SolutionRoot)\GUI\Properties\AssemblyInfo.cs" />
</ItemGroup>
<!-- Added for using the latest changeset id as build number -->
<Target Name="BuildNumberOverrideTarget">
  <BuildNumberGenerator>
    <Output TaskParameter="BuildNumber" PropertyName="BuildNumber" />
  </BuildNumberGenerator>
  <GetLatestChangeset>
    <Output TaskParameter="LatestChangeset" PropertyName="LatestChangeset" />
  </GetLatestChangeset>
</Target>
<Target Name="AfterGet" Condition="'$(IsDesktopBuild)'!='true' ">
  <MSBuild.ExtensionPack.VisualStudio.TfsVersion 
     TaskAction="SetVersion" Files="%(FilesToVersion.Identity)"
     Version="$(VersionMajor).$(VersionMinor).$(VersionService).$(LatestChangeset)" 
AssemblyVersion="$(VersionMajor).$(VersionMinor).$(VersionService).$(LatestChangeset)"
SetAssemblyVersion="true" />
</Target>

1 个答案:

答案 0 :(得分:1)

添加PropertyGroup可能会有所帮助。

<PropertyGroup>
    <MyVersionMajor Condition="$(MyVersionMajor)==''">$(VersionMajor)</MyVersionMajor>
</PropertyGroup>

如果未通过MSBuild参数显式设置,则会将名为MyVersionMajor的属性设置为VersionMajor属性。

要将MyVersionMajor设置为MSBuild参数,请将以下内容添加到MSBuild命令

MSBuild.exe <yourprojectfile> /p:MyVersionMajor=2

您现在需要更改构建目标以包含新属性:

<Target Name="AfterGet" Condition="'$(IsDesktopBuild)'!='true' ">
  <MSBuild.ExtensionPack.VisualStudio.TfsVersion 
     TaskAction="SetVersion" Files="%(FilesToVersion.Identity)"
     Version="$(MyVersionMajor).$(VersionMinor).$(VersionService).$(LatestChangeset)" 
AssemblyVersion="$(MyVersionMajor).$(VersionMinor).$(VersionService).$(LatestChangeset)"
SetAssemblyVersion="true" />
</Target>

确保您的新属性组出现在此目标之前。

当您针对此项目运行MSBuild而未指定参数时,您应该获得"5.0.0.{changeset_number}",当您指定参数时,您将获得"2.0.0.{changeset_number}"