方法 : 厳密な名前でアセンブリに署名する
更新 : 2007 年 11 月
Windows Software Development Kit (SDK) には、厳密な名前でアセンブリに署名するためのいくつかの方法が用意されています。
Windows SDK に用意されているアセンブリ リンカ (Al.exe) を使用する。
アセンブリ属性を使用して、厳密な名前情報をコードに挿入する。使用するキー ファイルが配置されている場所に応じて、AssemblyKeyFileAttribute または AssemblyKeyNameAttribute を使用できます。
メモ : .NET Framework Version 2.0 では、属性が使用されるときに一部のコンパイラが警告メッセージを発行します。
C# および Visual Basic で /keyfile、/delaysign などのコンパイラ オプションを使用するか、C++ でリンカ オプションとして /KEYFILE または /DELAYSIGN を使用する。遅延署名については、「アセンブリへの遅延署名」を参照してください。
メモ : |
---|
Visual Studio 2005 では、アセンブリに署名するためのツールが開発環境に用意されています。「アセンブリおよびマニフェストへの署名の管理」と「[署名] ページ (プロジェクト デザイナ)」を参照してください。 |
厳密な名前でアセンブリに署名するには、暗号キー ペアが必要です。キー ペアの作成の詳細については、「方法 : 公開キーと秘密キーのキー ペアを作成する」を参照してください。
アセンブリ リンカを使用してアセンブリを作成し、厳密な名前でそのアセンブリに署名するには
コマンド プロンプトに次のコマンドを入力します。
al/out:<assembly name> <module name>/keyfile:<file name>
このコマンドの assembly name は厳密な名前で署名するアセンブリの名前、module name はアセンブリの作成に使用するコード モジュールの名前です。file name はキー ペアを格納するコンテナまたはファイルの名前です。
キー ファイル sgKey.snk を使用して厳密な名前でアセンブリ MyAssembly.dll に署名する例を、次に示します。
al /out:MyAssembly.dll MyModule.netmodule /keyfile:sgKey.snk
属性を使用して厳密な名前でアセンブリに署名するには
- コード モジュール内で、厳密な名前でアセンブリに署名するときに使用するキー ペアを格納するファイルまたはコンテナの名前を指定して、AssemblyKeyFileAttribute または AssemblyKeyNameAttribute を追加します。
アセンブリがコンパイルされるディレクトリにある sgKey.snk というキー ファイルと AssemblyKeyFileAttribute を使用するコード例を次に示します。この例では、コマンド ライン コンパイラの vbc.exe と csc.exe を使用してアセンブリがコンパイルされていると仮定します。
<Assembly:AssemblyKeyFileAttribute("sgKey.snk")>
[assembly:AssemblyKeyFileAttribute(@"sgKey.snk")]
メモ : |
---|
Visual Studio などの開発環境では、アセンブリはプロジェクト ディレクトリでコンパイルされないことがあります。たとえば、Visual Studio の一部のバージョンは、C# プロジェクトを bin\Debug サブディレクトリでコンパイルします。その場合、このコード例のパスは "..\\..\\sgKey.snk" になります。Visual Studio 2005 では、C# キー ファイルはプロジェクト設定で指定できます。 |
コンパイル時にアセンブリに遅延署名することもできます。詳細については、「アセンブリへの遅延署名」を参照してください。
厳密な名前でアセンブリに署名すると、アセンブリ リンカ (Al.exe) は、現在のディレクトリと出力ディレクトリを基準にしてキー ファイルを検索します。コマンド ライン コンパイラを使用する場合は、コード モジュールを格納する現在のディレクトリにキーをコピーするだけで十分です。