ホームに戻る
出典 :
[C#] アセンブリ情報やバージョンを取得する - ざこノート アセンブリが持つ3つのバージョンの意味 - Caronte アセンブリのバージョン情報を取得する - Programming/.NET Framework/Tips - 総武ソフトウェア推進所 ビルド時にバージョンを更新する方法 | SPACEKEY
目次 :

アセンブリ情報とは

ビルド時にアセンブリ(EXE / DLL)に付与できる、バージョン、著作権などの情報のこと(下図参照)。
これらはファイルのプロパティから参照することができる。

アセンブリ情報の付与

Visual Studio上で行う場合

ここではVisual Studio 2022を例に挙げる。
  1. ソリューション エクスプローラー上でプロジェクトファイル(CSPROJ など)を右クリックし、「プロパティ」を選択する。
  2. 「パッケージ」>「全般」以下の各項目を設定する。

プログラム中からのアセンブリ情報の参照

現在動作しているアセンブリの情報は、System.Reflection.Assembly.GetExecutingAssembly() で取得できる。
取得した System.Reflection.Assembly 型から個々の情報を抽出できるが、項目によって抽出方法は異なる(後述)。

取得できる項目一覧

項目 AssemblyName FileVersionInfo
(System.Diagnostics)
Attribute string
(ファイルパス)
アセンブリ名
タイトル
説明
会社
製品
著作権
商標
アセンブリバージョン
ファイルバージョン
パッケージバージョン
GUID
ニュートラル言語
COM参照可否
パス

AssemblyName として取得

アセンブリ名、およびバージョンを参照する際に使用。高速に処理できる。
using System.Reflection; : var assemblyName = Assembly.GetExecutingAssembly().GetName(); var n1 = assemblyName.Name; //< アセンブリ名 var v1 = assemblyName.Version; //< アセンブリバージョン

FileVersionInfo として取得

ファイルにアクセスするため速度が低い。
using System.Diagnostics; using System.Reflection; : var fileVersionInfo = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location); var t2 = fileVersionInfo.FileDescription; //< タイトル var d2 = fileVersionInfo.Comments; //< 説明 var c2 = fileVersionInfo.CompanyName; //< 会社 var p2 = fileVersionInfo.ProductName; //< 製品 var r2 = fileVersionInfo.LegalCopyright; //< 著作権 var m2 = fileVersionInfo.LegalTrademarks; //< 商標 var f2 = fileVersionInfo.FileVersion; //< ファイルバージョン var f3 = fileVersionInfo.ProductVersion; //< パッケージバージョン

Attribute として取得

項目ごとに指定する型(T)が異なる点に注意。リフレクションを行うため、速度は低い。
using System.Reflection; : var assembly = Assembly.GetExecutingAssembly(); T GetCustomAttribute<T>() where T : Attribute => (T)Attribute.GetCustomAttribute(assembly, typeof(T)); var t1 = GetCustomAttribute<AssemblyTitleAttribute>().Title; //< タイトル var d1 = GetCustomAttribute<AssemblyDescriptionAttribute>().Description; //< 説明 var c1 = GetCustomAttribute<AssemblyCompanyAttribute>().Company; //< 会社 var p1 = GetCustomAttribute<AssemblyProductAttribute>().Product; //< 製品 var r1 = GetCustomAttribute<AssemblyCopyrightAttribute>().Copyright; //< 著作権 var m1 = GetCustomAttribute<AssemblyTrademarkAttribute>().Trademark; //< 商標 var l1 = GetCustomAttribute<NeutralResourcesLanguageAttribute>().CultureName; //< ニュートラル言語 var g1 = GetCustomAttribute<GuidAttribute>().Value; //< GUID var o1 = GetCustomAttribute<ComVisibleAttribute>().Value; //< COM参照可否 var v2 = GetCustomAttribute<AssemblyFileVersionAttribute>().Version; //< ファイルバージョン var v3 = GetCustomAttribute<AssemblyInformationalVersionAttribute>().InformationalVersion; //< パッケージバージョン

動作ディレクトリを取得

Assembly のプロパティ Location より、アセンブリのパスを参照可能。
また、System.IO.Path.GetDirectoryName() でアセンブリが格納されているディレクトリ( = 実行ディレクトリ)を抽出できる。
using System.Reflection; : var assembly = Assembly.GetExecutingAssembly(); string path = assembly.Location; //< ファイルパス string dir = System.IO.Path.GetDirectoryName(path); //< 実行ディレクトリ