方法 : 完全署名を使用して動的アセンブリに厳密な名前を指定する
更新 : 2007 年 11 月
動的アセンブリに厳密な名前を指定できます。厳密な名前を指定するには、部分署名または完全署名を使用します。部分署名を使用する場合は、DefineDynamicAssembly メソッドへ渡される AssemblyName に公開キーを指定する必要があります。共通言語ランタイムでは、ポータブル実行可能 (PE) ファイル内に厳密な名前署名 BLOB のための領域が割り当てられますが、アセンブリに実際に署名されるわけではありません。生成されたアセンブリには、Windows Software Development Kit (SDK) のツールを使用して後処理段階で完全な署名ができます。
完全署名を使用する場合は、公開キーと秘密キーのペアを指定する必要があります。公開キーと秘密キーは、一般に Crypto API 暗号サービス プロバイダ (CSP) によって所有されているキー コンテナ、またはファイルかディスクに保存されます。セキュリティ レベルの低いキーは、通常、ソフトウェア ベースの CSP によって生成され、ファイルにエクスポートされるため、プロジェクトの開発中にソース コード管理システムにチェックインできます。セキュリティ レベルの高いキーは、ハードウェアによって生成されることが多く、セキュリティ上の理由から、通常はエクスポートできません。このようなキー ペアには、キー コンテナを通じて間接的にしかアクセスできません。厳密な名前キー ペアを指定するには、System.Reflection.StrongNameKeyPair クラスを使用します。
完全署名を使用して動的アセンブリに厳密な名前を指定する例を次に示します。
使用例
Dim fs As New FileStream("SomeKeyPair.snk", FileMode.Open)
Dim kp As New StrongNameKeyPair(fs)
fs.Close()
Dim an As New AssemblyName()
an.KeyPair = kp
Dim myAppDomain As AppDomain = Thread.GetDomain()
Dim ab As AssemblyBuilder = myAppDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.RunAndSave)
FileStream fs = new FileStream("SomeKeyPair.snk", FileMode.Open);
StrongNameKeyPair kp = new StrongNameKeyPair(fs);
fs.Close();
AssemblyName an = new AssemblyName();
an.KeyPair = kp;
AppDomain appDomain = Thread.GetDomain();
AssemblyBuilder ab = appDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.RunAndSave);