.NET TIPS

アセンブリにバージョン情報を設定するには?

デジタルアドバンテージ
2004/07/23

アセンブリのバージョン情報

 .NETアセンブリ(.EXEファイルや.DLLファイル)には、次の画面で示しているようないくつかのバージョン情報を設定することができる。この画面は、エクスプローラでファイルを選択し、そのプロパティを表示させているところだ。

.NETアセンブリに設定されたバージョン情報
.NETアセンブリ(asmverinfo.exe)のバージョン情報を表示したところ。バージョン情報を表示するには、エクスプローラで.NETアセンブリ・ファイル(.EXEファイルや.DLLファイル)を右クリックして表示されるコンテキスト・メニューから[プロパティ]を選択する。もしくはファイルを選択した状態でショートカット・キー[Alt]+[Enter]キーを押す。するとファイルのプロパティ画面が開くので、その画面の[バージョン情報]タブをクリックすれば、バージョン情報が表示される。
  Win32ファイル・システム用のバージョン番号が表示される。
  ファイルの概要が表示される。
  著作権情報が表示される。
  [項目]を選択すると、選択した項目の内容が[値]欄に表示される。

 アセンブリに上記画面のようなバージョン情報を設定するには、アセンブリ属性(アセンブリについての情報を設定するため属性)を指定するコードを記述すればよい。これは、指定する属性の名前の前に「assembly:」(VB.NETの場合には「Assembly:」)を付けたものだ。

 なおVisual Studio .NETでプロジェクトを作成した場合、AssemblyInfo.cs(C#の場合)もしくはAssemblyInfo.vb(VB.NET場合)という名前のファイルが自動生成され、そのファイルでアセンブリ属性を指定したひな形のコードがあらかじめ記述されるので、そこにコードの追加や修正を行えばよい。

 次のサンプル・プログラムは、バージョン情報に関連するアセンブリ属性を指定した例である。

using System.Reflection;

[assembly: AssemblyVersion("1.0.1.0")]
[assembly: AssemblyFileVersion ("2.1.1852.0")]
[assembly: AssemblyInformationalVersion("2.1")]
[assembly: AssemblyTitle("Assembly Version Information 2004")]
[assembly: AssemblyDescription("このアセンブリにはバージョン情報が設定されています。")]
[assembly: AssemblyProduct("Assembly Version Information")]
[assembly: AssemblyCompany("(株)デジタルアドバンテージ")]
[assembly: AssemblyCopyright("Copyright (c) 2004 Digital Advantage Corp.")]
[assembly: AssemblyTrademark("asmverinfo (R) は●●●の登録商標です。")]
[assembly: AssemblyCulture("")]
#if Debug
[assembly: AssemblyConfiguration("Debug")]
#else
[assembly: AssemblyConfiguration("Release")]
#endif
アセンブリ属性を指定するサンプル・プログラム(C#)
 
Imports System.Reflection

<Assembly: AssemblyVersion("1.0.1.0")>
<Assembly: AssemblyFileVersion("2.1.1852.0")>
<Assembly: AssemblyInformationalVersion("2.1")>
<Assembly: AssemblyTitle("Assembly Version Information 2004")>
<Assembly: AssemblyDescription("このアセンブリにはバージョン情報が設定されています。")>
<Assembly: AssemblyProduct("Assembly Version Information")>
<Assembly: AssemblyCompany("(株)デジタルアドバンテージ")>
<Assembly: AssemblyCopyright("Copyright (c) 2004 Digital Advantage Corp.")>
<Assembly: AssemblyTrademark("asmverinfo (R) は●●●の登録商標です。")>
<Assembly: AssemblyCulture("")>
#If Debug Then
<Assembly: AssemblyConfiguration("Debug")>
#Else
<assembly: AssemblyConfiguration("Release")>
#End If
アセンブリ属性を指定するサンプル・プログラム(VB.NET)

 上記コードのそれぞれのアセンブリ属性における設定内容と、冒頭の画面で示したバージョン情報の項目との関係を次の表にまとめた。

アセンブリ属性 バージョン情報 説明
AssemblyVersion Assembly Version(アセンブリ・バージョン) .NETアセンブリ用のバージョン番号。.NET Frameworkのバージョン管理機能で使われる。このAssemblyVersion属性の値が指定されていなければ、AssemblyFileVersion属性の値が既定値として使われる
AssemblyFileVersion ファイル・バージョン Win32ファイル・システム用のバージョン番号。このAssemblyFileVersion属性の値が指定されていなければ、AssemblyVersion属性の値が既定値として使われる
AssemblyInformationalVersion 製品バージョン プログラム用のバージョン番号。このAssemblyInformationalVersion属性の値が指定されていなければ、AssemblyFileVersion属性の値が、AssemblyFileVersion属性の値も指定されていなければ、AssemblyVersion属性の値が既定値として使われる
AssemblyTitle 説明 プログラムの概要
AssemblyDescription コメント プログラムの詳細な説明
AssemblyProduct 製品名 プログラムの正式名称
AssemblyCompany 会社名 会社名
AssemblyCopyright 著作権 著作権情報。記述形式は
「Copyright (c) <西暦年> <会社名>.」(例:Copyright (c) 2001-2005 Digital Advantage Corp.)
AssemblyTrademark 商標 プログラム名称などを商標登録していればその情報を記述する(例えば、Windows (R) は登録商標)。それ以外の場合は何も指定しなくてよい(もしくは""を設定する)
AssemblyCulture 言語 “ja-JP”や“en-US”などのカルチャ(=言語などの情報)。リソースのみを含むサテライト・アセンブリの場合に指定できる。一方、実行可能コードを含むメイン・アセンブリには指定できない(""を設定する必要がある)。カルチャを指定しない場合は「ニュートラル言語」となる
AssemblyConfiguration −(使われていない) DebugやReleaseといった構成情報。ただしこの値は使用されていないので、設定する必要はない
アセンブリ属性の設定内容とバージョン情報の項目との関係
バージョン情報の項目で、この表には記載されていない「正式ファイル名」と「内部名」には、アセンブリの出力ファイル名(本稿の例では「asmverinfo.exe」)が自動設定される。

バージョン番号の仕様

 バージョン情報には、上記の表を見れば分かるように、「アセンブリ・バージョン(Assembly Version)」「ファイル・バージョン」「製品バージョン」という3つのバージョン番号がある。それぞれ「.NETアセンブリ用」「Win32ファイル・システム用」「プログラム用」となっているが、多くの場合、これらの番号を個々に使い分ける必要はないだろう。すべて同じバージョン番号とする場合には、アセンブリ・バージョンのみを設定しておけば、ほかのファイル・バージョンと製品バージョンにも同じバージョン番号が自動設定される。

 これらのバージョン番号は基本的に、次のようにピリオド(.)で区切られた4つのパートで構成しなければならない。

<メジャー・バージョン>.<マイナー・バージョン>.<ビルド番号>.<リビジョン>
バージョン番号の構成
ユーザーに提示するバージョン番号(例えば「.NET Framework 1.0」の「1.0」)は、メジャー・バージョンとマイナー・バージョンを組み合わせた番号である。例えばメジャー・バージョンが「1」でマイナー・バージョンが「0」の場合、ユーザーに提示するバージョン番号は「1.0」である。ビルド番号はプログラムをリリース・ビルドするたびに1つずつ増加させていく番号で、リビジョンは(不具合修正などの理由で)ビルド番号を増加させずにプログラムを改訂する際に増加させる番号である。この4つの番号の組み合わせにより、プログラムのバージョンを管理する。

 ビルド番号とリビジョンには、ワイルドカード(以降、「*」)を指定することにより、プログラムのバージョン更新作業を自動化することができる。ただし「*」は、アセンブリ・バージョンにのみ指定でき、ファイル・バージョンと製品バージョンには指定できないので注意してほしい。

 例えば、次のようにバージョンを3つのパートで構成してビルド番号の位置に「*」を指定してビルドを行うと、ビルド番号とリビジョンはVS.NETが自動的に決定してくれる。

[assembly: AssemblyVersion("1.0.*")]

 番号自動決定の際、ビルド番号には2000年1月1日からの経過日数が設定され、リビジョン番号には現地時間の0時からの経過秒数を2で割った値が設定される。よって、どちらも大きな数値が割り当てられることが多いので注意してほしい。

 また、次のようにリビジョンの位置にのみ「*」を指定すれば、リビジョン番号だけをVS.NETが自動的に決定してくれる。

[assembly: AssemblyVersion("1.0.0.*")]

 ただし先ほど説明したように、リビジョン番号に割り当てられる値は0時からの経過秒数なので、1日たてば番号が「0」に戻ってしまうことに注意してほしい。リビジョン番号を自動化する場合は、ビルド番号の方を手動で毎日更新する必要がある。

 「*」によるバージョン番号の自動更新を行うかどうかは、開発体制や状況に合わせて決めることをお勧めする(むしろ「*」を使わない方がよいというケースも多い)。例えばもし、すべてのバージョン番号を正確に管理しているような開発体制ならば、「*」を使う必要はない。また、アセンブリに厳密名を付けているアプリケーションならば、ビルドのたびにバージョン番号が変更されることになるので、「*」は使わない方が無難である(※厳密名付きアセンブリはバージョン・チェックが行われるため、自動的なバージョンの変更が問題となる可能性がある)。End of Article

カテゴリ:クラス・ライブラリ 処理対象:アセンブリ
使用ライブラリ:AssemblyVersion属性(System.Reflection名前空間)
 
この記事と関連性の高い別の.NET TIPS
アセンブリ・バージョンとファイル・バージョンを一致させるには?
Visual Studio 2005でバージョン情報を設定するには?
バージョン情報ダイアログを作成するには?
ビルド時および実行時のCLRバージョンを取得するには?
VS.NETのコード・エディタに行番号を表示するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間