문제

I have a MSBuild *.proj file that builds my solution and sets build's version using a changeset number.
Now I need to make two builds of the same solution, with one difference between: version of the first should be i.e. "5.0.0.{chanset_number}", but version of the second - "2.0.0.{chanset_number}".

I use the following code to get a number of the latest changeset and to set version of a build:

<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>
도움이 되었습니까?

해결책

Adding a PropertyGroup may help here.

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

This will set a property called MyVersionMajor to the VersionMajor property if you do not explicitly set it via an MSBuild Parameter.

To set MyVersionMajor as an MSBuild parameter add the following to your MSBuild Command

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

You now need to change the build target to include your new property:

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

Ensuring your new Property group appears before this target.

When you run MSBuild against this project without specifying the parameter you should get "5.0.0.{changeset_number}" and when you specify the parameter you would get "2.0.0.{changeset_number}"

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top