アセンブリ

アセンブリ情報

Visual Studioで作成したプロジェクトでは、AssemblyInfo.csファイルを編集するか、プロジェクトのプロパティの[アプリケーション]にある[アセンブリ情報]から設定できます。Assembly Information Dialog Box - Visual Studio 2015 | Microsoft Learn

[アセンブリ情報]ダイアログ ボックスから設定するとAssemblyInfo.csが書き換えられるため、AssemblyInfo.csから設定するならば[アセンブリ情報]ダイアログ ボックスは利用しないようにします。

バージョン情報

作成した実行プログラムに、バージョン情報を設定できます。

バージョン 属性  
アセンブリ バージョン AssemblyVersionAttribute アセンブリのバージョン情報
ファイル バージョン AssemblyFileVersionAttribute Win32アプリケーション用のバージョン情報で、ファイルのプロパティの[バージョン]タブに表示される。

(指定されていない場合は、アセンブリ バージョンの値が用いられる)

製品 バージョン AssemblyInformationalVersionAttribute アセンブリ マニフェストにバージョン情報を追加する。これは以下のプロパティで用いられる。
  • Application.ProductVersion
  • Application.UserAppDataPath
  • Application.UserAppDataRegistry

(指定されていない場合は、アセンブリ バージョンの値が用いられる)

.net - What are differences between AssemblyVersion, AssemblyFileVersion and AssemblyInformationalVersion? - Stack Overflow

AssemblyInfo.csでは、次のように指定します。

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

参考

署名 (Signing)

Visual Studioからは、プロジェクトのプロパティの[署名]タブで[アセンブリの署名]をチェックし、キーファイルを作成することでアセンブリに署名できます。アセンブリの署名 - [署名] ページ (プロジェクト デザイナー) - Visual Studio | Microsoft Learn

署名されたアセンブリが署名されていないアセンブリを参照していると、コンパイル時に「warning CS8002: 参照アセンブリ '***, Version=***, Culture=neutral, PublicKeyToken=null' には厳密な名前がありません。」と警告されます。また実行時には「ファイルまたはアセンブリ '***, Version=***, Culture=neutral, PublicKeyToken=null'、またはその依存関係の 1 つが読み込めませんでした。厳密な名前付きのアセンブリが必要です。 (HRESULT からの例外:0x80131044)」としてSystem.IO.FileLoadExceptionが発生します。

またコード分析では「アセンブリには有効な厳密な名前が必要です(Assemblies should have valid strong names)」としてCA2210で警告されます。

C++の場合

C++ではVisual Studioから設定できないため、Sn.exe (Strong Name Tool / 厳密名ツール) を用いて暗号キー ペアを作成します。

sn -k sample.snk
Sn.exe (厳密名ツール) | Microsoft Learn

そして/KEYFILE リンカーオプションで、そのファイルを用いてアセンブリに署名します。

/KEYFILE:sample.snk
/KEYFILE (アセンブリに署名するためのキーまたはキー ペアの指定) | MSDN

なおVisual Studioではこのオプションは、プロジェクトのプロパティの【構成プロパティ → リンカー 詳細設定】の[キー ファイル]から指定できます。

Assemblyクラス

プロパティ 内容
string ImageRuntimeVersion マニフェストを格納しているファイルに保存されているCLRを表すバージョン
     
Properties - Assembly Class (System.Reflection) | Microsoft Learn

アセンブリの取得

アセンブリ名が既知のアセンブリ

Assembly assembly = Assembly.Load(
    "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
Assembly.Load Method (System.Reflection) | Microsoft Learn

バージョンなどを省いた短い形式でも可能です。

Assembly assembly = Assembly.Load("mscorlib");

指定のアセンブリが見つからなかった場合は、FileNotFoundExceptionが投げられます。そのときの詳細な情報は、FileLoadException.FusionLogプロパティから得られます。

アセンブリの調査のみ

アセンブリの調査だけが目的ならば、Assembly.ReflectionOnlyLoad()を用います。How to: Load Assemblies into the Reflection-Only Context - .NET Framework | Microsoft Learn

型が宣言されているアセンブリ

Assembly assembly = typeof(MyClass).Assembly;
Type.Assembly Property (System) | Microsoft Learn

実行中のコードが含まれているアセンブリ

Assembly assembly = Assembly.GetExecutingAssembly();
Assembly.GetExecutingAssembly Method (System.Reflection) | Microsoft Learn

アセンブリに含まれる型が既知ならば、前述のType.Assemblyから取得する方がパフォーマンスに優れます。

既定のアプリケーション ドメインのアセンブリ

Assembly assembly = Assembly.GetEntryAssembly();
Assembly.GetEntryAssembly Method (System.Reflection) | Microsoft Learn

次のいずれかのアセンブリが返されます。

カスタム属性の取得

このアセンブリの、指定の型のカスタム属性を得られます。

public virtual object[] GetCustomAttributes (
    Type attributeType,
    bool inherit
    );
GetCustomAttributes(Type, Boolean) - Assembly.GetCustomAttributes Method (System.Reflection) | Microsoft Learn

すべてのカスタム属性は、CustomAttributesプロパティで取得できます。

Microsoft Learnから検索