.NETアセンブリバージョニングにSVNリビジョンを含める

ソフトウェア開発の世界では、バージョン管理は非常に重要です。Subversion(SVN)をバージョン管理システムとして使用している場合、SVNリポジトリのリビジョン番号を.NETアセンブリのバージョン文字列に含めることができれば、追跡性やデバッグの容易さが向上します。「CC.NETのようなサードパーティ製ツールなしにこれができる方法はあるのか?」と自問しているなら、その答えは明確な「はい」です。

問題:追加ツールなしのバージョニング

バージョン文字列にメジャーおよびマイナーのバージョン番号だけでなく、SVNリビジョン番号も反映させたいシチュエーションに出くわしたことがあるかもしれません。考慮するかもしれない一般的なターゲットバージョン形式は以下の通りです:

Major.Minor.SVNRev

残念ながら、追加ソフトウェアなしでこの実現方法を.NETで見つけるのは難しいかもしれません。特に、CやC++のような言語で同様のことを行ったことがある場合、なおさらです。C/C++では、ビルドスクリプトを使用してヘッダーファイルをバージョン番号で更新する方法がありました。

解決策:SubWCRevを使用する

SVNリビジョン番号を.NETアセンブリバージョニングに組み込むための効果的な方法は、SubWCRevを使用することです。これはTortoiseSVNに含まれているユーティリティです。SubWCRevは、ファイルからSVNキーワードを読み取り、ビルドプロセス中に適切なリビジョン情報に置き換えます。

SubWCRevの実装手順ガイド

  1. TortoiseSVNをダウンロードして設定する

    • まだダウンロードしていない場合はTortoiseSVNをダウンロードします。
    • それをマシンにインストールして、バンドルされているSubWCRevユーティリティにアクセスします。
  2. AssemblyInfo.csを設定する

    • AssemblyInfo.csファイルを開きます。このファイルには通常、アセンブリのバージョン情報が含まれています。
    • SubWCRevによってバージョン番号が置き換えられるプレースホルダーを追加します。

    例:

    [assembly: AssemblyVersion("1.0.0.0")]
    [assembly: AssemblyFileVersion("1.0.0.0")]
    [assembly: AssemblyInformationalVersion("1.0.0.0")]
    
  3. テンプレートファイルを作成する

    • 新しいテキストファイル(例:VersionInfo.txt)を作成し、バージョン情報がどのように埋め込まれるか定義します。
    • リビジョン番号のためのプレースホルダーを使用します。

    VersionInfo.txtの例:

    [assembly: AssemblyVersion("${VersionNumber}.0")]
    [assembly: AssemblyFileVersion("${VersionNumber}.0")]
    [assembly: AssemblyInformationalVersion("${VersionNumber}.${Revision}")]
    
  4. SubWCRevを実行する

    • SubWCRevコマンドを使用して、VersionInfo.txtファイル内のプレースホルダーをSVNリポジトリからの実際のバージョン番号に置き換えます。
    • これは通常、コマンドラインまたはビルドスクリプトに組み込む形で行えます。
  5. プロジェクトをビルドする

    • プロジェクトをビルドする際に、SubWCRevはリビジョン番号が埋め込まれた新しいAssemblyInfo.csを生成します。

結論

SubWCRevを.NETプロジェクトのワークフローに組み込むことで、外部ソフトウェア(CC.NETなど)に依存することなく、アセンブリのバージョン文字列にSVNリビジョン番号を簡単に含めることができます。このアプローチは、バージョニングをより情報豊かにするだけでなく、シンプルで管理しやすいものに保つことができます。

SVNリビジョン番号を.NETアセンブリバージョニングに含める方法がわかったので、次のプロジェクトで試してみてください。明確さを実感できるでしょう。