2013-01-07 23 views
8

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

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

しかし属性で使用される文字列の値がコンパイル時に再解析され、どこで読んだことがあります。

どのようにこの動的なバージョン管理を完了するためのアドバイスですか?

理想的な状況:

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

私は文句を言わない仕事を知っているが、ポイントはacrossed取得する必要があります。

+3

http://autobuildversion.codeplex.com/ –

+0

@RobertHarvey @RobertHarveyでは、Pre-Buildのバージョン情報を傍受することはできません。これは、VS2012の自動インクリメントの大部分がワイルドカードを想定しているため、うんざりしています。 – GoldBishop

+0

Autobuildプラグインがあなたの望むことをしていませんか? –

答えて

3

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

  • だけMicrosoft.CSharpた後、あなたのプロジェクト(csproj)に以下のサンプルを追加[SolutionFolder] \ MsBuildExtensions \ MSBuildCommunityTasks

    フォルダへ
  • を解凍MsbuildCommunityTasks

  • でzipファイルをダウンロード.Targetsインポート。

<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ターゲット上で削除され、ソースコントロールをきれいに保ちます。

    BeforeBuild:

    ビル2013.01.14.1016 ... ファイル "プロパティ\ AssemblyVersionInfo.cs" AssemblyInfo作成しました。

    (...)

    AfterBuild:ファイル "プロパティ\ AssemblyVersionInfo.cs" を削除

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

+0

これはVBにも当てはまると思いますか?私はCSとVBの間でフリップし、ちょうど私が2つの言語の間で同じDevEnvビルドスタンダードを使用できることを確かめたい。 – GoldBishop

+0

はい、VBで正常に動作します。 'AssemblyInfo'タスクパラメータ(CodeLanguage = "VB")を調整して、プロパティMy-PropertiesDirとMy-AssemblyInfoをそれに応じて調整するだけです。 –

+0

病気は私の開発者の上にインストールされなければなりません....クライアントコンピュータはロックされているので、要求なしで何もインストールできません;) – GoldBishop