我有一个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>
答案 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}"