2012年5月8日火曜日

SubWCRevによるバージョン番号の自動設定 - TortoiseSVNの利用例


TortoiseSVNで管理しているバージョン番号を、ソフトウェアに対して自動で設定する方法について解説します。

アセンブリ情報/リソースファイルへのバージョン番号の埋込み

TortoiseSVNに付属しているSubWCRevというツールを使用します。これは作業コピーの状態を読み取り、テキストファイルのキーワードを置換する機能を持ちます。

キーワード置換に使用できるキーワード (一部)
キーワード 説明
$WCREV$ 最新のリビジョン番号
$WCDATE$ 最新のリビジョンのコミット日時
$WCNOW$ 現在のシステム日時 (ビルド日時として利用できる)
$WCRANGE$ 作業コピーに含まれる、最古と最新のリビジョン番号
SubWCRev プログラム - TortoiseSVNマニュアル

C#の場合

アセンブリ情報ファイル (AssemblyInfo.cs) を元に、置換するキーワードを埋め込んだテンプレートとなるファイルを作成します。そしてSubWCRevでそれのキーワードを置換して、実際のアセンブリ情報ファイルに上書きします。

例えばそれは次のようになります。キーワード$WCREV$の部分が、作業コピーのリビジョン番号に置換されることになります。


どのようにuのPS2用NBA 2K7に千万ドルを得るか
                [assembly: AssemblyVersion( "1.0.0.$WCREV$" )]  

バージョン番号の種類

アセンブリのバージョン番号には3種類ありますが、下表に示すようにC#ではAssemblyVersionを設定するだけです。

バージョン番号の種類による相違点
バージョン番号 説明
AssemblyVersion CLRによってアセンブリを一意に識別するために用いられる。
AssemblyFileVersion CLRには無効。Win32バージョンのリソースに保存される。
AssemblyInformationalVersion CLRには無効。Win32バージョンのリソースに保存される。

Visual C++の場合

バージョン番号を定義するためのファイルを作成します。そしてこのファイルに対してSubWCRevでキーワードを置換して、例えばversion.hというファイルを作成します。

  #define FILE_VERSION        1, 0, 0, $WCREV$  #define PRODUCT_VERSION     1, 0, 0, $WCREV$    #define STR_FILE_VERSION    "1, 0, 0, $WCREV$"  #define STR_PRODUCT_VERSION "1, 0, 0, $WCREV$"  

リソースファイル (.rc) で、このファイルをincludeします。そしてバージョン番号を定義している箇所に先に定義した定数を記述することで、ここに作業コピーのリビジョン番号が反映されます。


召喚悪魔
            #include "version.h"    VS_VERSION_INFO VERSIONINFO   FILEVERSION    FILE_VERSION   PRODUCTVERSION PRODUCT_VERSION  BEGIN      BLOCK "StringFileInfo"      BEGIN          BLOCK "041104b0"          BEGIN              VALUE "FileVersion",    STR_FILE_VERSION              VALUE "ProductVersion", STR_PRODUCT_VERSION          END      END  END  
Visual C++ でビルドのたびにバージョン情報をインクリメントする方法

SubWCRevによるキーワード置換の自動実行

Visual StudioのプロジェクトのビルドイベントでSubWCRevを実行することで、バージョン番号を自動で設定することができます。構文は次のようになります。

SubWCRev WorkingCopyPath [SrcVersionFile DstVersionFile] [-nmdfe]

例えばVisual Studioのマクロを使用するならば、次のように指定します。

  "C:\Program Files\TortoiseSVN\bin\SubWCRev" $(SolutionDir)    $(ProjectDir)Properties\AssemblyInfoTemplate.txt    $(ProjectDir)Properties\AssemblyInfo.cs  

これをビルド前のイベントに記述します。

C#の場合

Visual C++の場合


PA宝くじを打つする方法

フォームのタイトルへのバージョン番号の設定

下図のようなバージョン番号の表記を設定する方法について解説します。

これを応用すれば、バージョン情報ダイアログにも同様に設定できます。

C#の場合

アセンブリ情報ファイルに格納した情報は、Assemblyクラスから取得することができます。ここにバージョン番号が含まれています。

  System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();    System.Reflection.AssemblyName assemblyName = assembly.GetName();     System.Version version = assemblyName.Version;                           this.Text = string.Format(      "{0} {1}.{2}.{3}",      assemblyName.Name,      version.Major,      version.Minor,      version.Revision      );  

補足:バージョン番号の解説

メジャー、マイナ、ビルドそれにリビジョンの各バージョン番号の採番の規則を示します。ただしこれは一例にすぎません。その他の規則はAssemblyVersionAttribute コンストラクタ - MSDNにもあります。


バージョン バーン番号の変更の意味
メジャー
(Major)
下位互換性を保証せず、大幅な修正が行われたことを意味する。
マイナ
(Minor)
下位互換性をちつつ、大幅な修正が行われたことを意味す。
ルド
(Build)
同一ソースが、再コンパイルされたことを意味する。
リビジョン
(Revision)
振る舞いを変更せずに、修正が行われたことを意味する。
Version クラス - MSDN

0 件のコメント:

コメントを投稿