Visual Studioで作成したプロジェクトでは、AssemblyInfo.csファイルを編集するか、プロジェクトのプロパティの[アプリケーション]にある[アセンブリ情報]から設定できます。Assembly Information Dialog Box - Visual Studio 2015 | Microsoft Learn
[アセンブリ情報]ダイアログ ボックスから設定するとAssemblyInfo.csが書き換えられるため、AssemblyInfo.csから設定するならば[アセンブリ情報]ダイアログ ボックスは利用しないようにします。
作成した実行プログラムに、バージョン情報を設定できます。
バージョン | 属性 | |
---|---|---|
アセンブリ バージョン | AssemblyVersionAttribute | アセンブリのバージョン情報 |
ファイル バージョン | AssemblyFileVersionAttribute | Win32アプリケーション用のバージョン情報で、ファイルのプロパティの[バージョン]タブに表示される。
(指定されていない場合は、アセンブリ バージョンの値が用いられる) |
製品 バージョン | AssemblyInformationalVersionAttribute | アセンブリ マニフェストにバージョン情報を追加する。これは以下のプロパティで用いられる。
(指定されていない場合は、アセンブリ バージョンの値が用いられる) |
AssemblyInfo.csでは、次のように指定します。
[assembly: AssemblyVersion("1.0.*")]
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++ではVisual Studioから設定できないため、Sn.exe (Strong Name Tool / 厳密名ツール) を用いて暗号キー ペアを作成します。
sn -k sample.snkSn.exe (厳密名ツール) | Microsoft Learn
そして/KEYFILE リンカーオプションで、そのファイルを用いてアセンブリに署名します。
/KEYFILE:sample.snk/KEYFILE (アセンブリに署名するためのキーまたはキー ペアの指定) | MSDN
なおVisual Studioではこのオプションは、プロジェクトのプロパティの【構成プロパティ → リンカー 詳細設定】の[キー ファイル]から指定できます。
型 | プロパティ | 内容 |
---|---|---|
string | ImageRuntimeVersion | マニフェストを格納しているファイルに保存されているCLRを表すバージョン |
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プロパティで取得できます。