2

我有一个 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>
4

1 回答 1

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}"

于 2012-10-04T12:13:32.373 回答