8

ビルド時にバージョン管理を動的にしたい状況があります。

バージョン パターン:<year>.<month>.<day>.<hhmm>

しかし、属性で使用される文字列値がコンパイル時に再解析される場所を読みました。

この動的バージョン管理を完了する方法について何かアドバイスはありますか?

理想的な状況:

<Assembly: AssemblyVersion("4.0.0.0")> 
<Assembly: AssemblyFileVersion(Year(Now) & "." & Month(Now()) & "." & Day(Now()) & "." & String.format("hhmm", now()))> 

うまくいかないことはわかっていますが、要点を理解する必要があります。

4

1 に答える 1

3

MsbuildCommunityTasksを使用して、ビルド番号を生成し、ビルド前にアセンブリ ファイルのバージョンをカスタマイズできます。

  • MsbuildCommunityTasksで zip をダウンロードします。

  • [SolutionFolder]\MsBuildExtensions\MSBuildCommunityTasks フォルダーに解凍します。

  • Microsoft.CSharp.Targets インポートの直後に、プロジェクト (csproj) に以下のサンプルを追加します。

  <PropertyGroup>
  <MSBuildCommunityTasksPath>$(MSBuildThisFileDirectory)..\MsBuildExtensions\MSBuildCommunityTasks</MSBuildCommunityTasksPath>  
    <My-PropertiesDir>Properties</My-PropertiesDir>
  </PropertyGroup>
  <Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets"/>
  <Target Name="BeforeBuild">
    <Time Format="yyyy.MM.dd.HHmm">
      <Output TaskParameter="FormattedTime" PropertyName="My-VersionNumber" />
    </Time>
    <Message Text="Building $(My-VersionNumber) ...">
    </Message>
    <ItemGroup>
      <My-AssemblyInfo Include="$(My-PropertiesDir)\AssemblyVersionInfo.cs" />
      <Compile Include="@(My-AssemblyInfo)" />
    </ItemGroup>
    <MakeDir Directories="$(My-PropertiesDir)" />
    <AssemblyInfo OutputFile="@(My-AssemblyInfo)"
          CodeLanguage="CS"
          AssemblyFileVersion="$(My-VersionNumber)"
          AssemblyInformationalVersion="$(My-VersionNumber)"
          Condition="$(My-VersionNumber) != '' "
          />
  </Target>
  <Target Name="AfterBuild">
    <Delete Files="@(My-AssemblyInfo)" />
  </Target>

  • AssemblyInfo.cs から AssemblyFileVersion 属性を消去します。ビルド時に生成されます。

  • ビルドすると、バージョン番号がコンソールに表示されます。ソース管理をクリーンに保つために、生成されたファイルは AfterBuild ターゲットで削除されます。

    ビルド前:

    2013.01.14.1016 をビルドしています ... AssemblyInfo ファイル "Properties\AssemblyVersionInfo.cs" を作成しました。

    (...)

    ビルド後:

    ファイル「Properties\AssemblyVersionInfo.cs」を削除しています。

  • msbuild コードが少ない多くのプロジェクトでこれを行う場合は、カスタマイズされたビルド スクリプトを作成してソリューションをまとめる必要があります。

于 2013-01-14T13:03:26.980 に答える