方法: 厳密な名前でアセンブリに署名する

注意

.NET Core では厳密な名前のアセンブリがサポートされており、.NET Core ライブラリ内のすべてのアセンブリは署名されていますが、ほとんどのサードパーティ アセンブリには厳密な名前は必要ありません。 詳細については、GitHub の「厳密な名前の署名」を参照してください。

厳密な名前でアセンブリに署名するには、いくつかの方法があります。

  • Visual Studio のプロジェクトのプロジェクト デザイナー[ビルド]>[Strong naming] (厳密な名前付け) ページを使用します。 これは、厳密な名前でアセンブリに署名するための最も簡単で便利な方法です。
  • アセンブリ リンカー (Al.exe) を使用して、.NET Framework のコード モジュール ( .netmodule ファイル) をキー ファイルにリンクする。
  • アセンブリ属性を使用して、厳密な名前情報をコードに挿入する。 使用するキー ファイルが配置されている場所に応じて、 AssemblyKeyFileAttribute または AssemblyKeyNameAttribute 属性を使用できます。
  • コンパイラ オプションを使用する。

厳密な名前でアセンブリに署名するには、暗号キー ペアが必要です。 キー ペアの作成の詳細については、「方法:公開キーと秘密キーのキー ペアを作成する」を参照してください。

Visual Studio を使用してアセンブリを作成し、厳密な名前でそのアセンブリに署名する

  1. ソリューション エクスプローラーで、プロジェクトのショートカット メニューを開き、 [プロパティ] を選択します。
  2. [ビルド] タブの下に、[Strong naming](厳密な名前付け) ノードがあります。
  3. [アセンブリの署名] チェックボックスをオンにすると、オプションが展開されます。
  4. [参照] ボタンを選択して、[厳密な名前のキー ファイル] パスを選択します。

注意

アセンブリの遅延署名を行うには、公開キー ファイルを選択します。

Visual Studio 2022: Project properties, Build / Strong naming section.

アセンブリ リンカーを使用してアセンブリを作成し、厳密な名前でそのアセンブリに署名する

Visual Studio 開発者コマンド プロンプトまたは Visual Studio Developer PowerShell を開いて、次のコマンドを入力します。

al/out:<assemblyName><moduleName>/keyfile:<keyfileName>

この場合、

  • assemblyNameは、アセンブリ リンカーが生成する、厳密な名前で署名されたアセンブリ ( .dll ファイルまたは .exe ファイル) の名前です。
  • moduleName は、1 つ以上の型を含む、.NET Framework コード モジュール ( .netmodule ファイル) の名前です。 C# または Visual Basic で /target:module スイッチを使ってコードをコンパイルすることにより、.netmodule ファイルを作成できます。
  • keyfileName は、キー ペアを格納しているコンテナーまたはファイルの名前です。 アセンブリ リンカーは、現在のディレクトリとの関連で相対パスを解釈します。

次の例では、キー ファイル sgKey.snk を使用して、厳密な名前でアセンブリ MyAssembly.dll に署名します。

al /out:MyAssembly.dll MyModule.netmodule /keyfile:sgKey.snk

このツールの詳細については、「 アセンブリ リカー」を参照してください。

属性を使用して厳密な名前でアセンブリに署名する

  1. System.Reflection.AssemblyKeyFileAttribute または AssemblyKeyNameAttribute 属性をソース コード ファイルに追加して、厳密な名前でアセンブリに署名するときに使用するキー ペアを格納するファイルまたはコンテナーの名前を指定します。

  2. ソース コード ファイルを通常どおりにコンパイルします。

    注意

    C# および Visual Basic コンパイラは、ソース コードで AssemblyKeyFileAttribute または AssemblyKeyNameAttribute 属性が見つかった場合、コンパイラ警告を発行します (CS1699 と BC41008)。 この警告は無視してかまいません。

次の例は、keyfile.snk という名前のキー ファイルを指定して、AssemblyKeyFileAttribute 属性を使用します。このキー ファイルは、アセンブリがコンパイルされるディレクトリにあります。

[assembly:AssemblyKeyFileAttribute("keyfile.snk")];
[assembly:AssemblyKeyFileAttribute("keyfile.snk")]
<Assembly:AssemblyKeyFileAttribute("keyfile.snk")>

ソース ファイルのコンパイル時に、アセンブリに遅延署名することもできます。 詳細については、「アセンブリへの遅延署名」を参照してください。

コンパイラを使用して厳密な名前でアセンブリに署名する

C# と Visual Basic では /keyfile または /delaysign コンパイラ オプションを使用し、C++ では /KEYFILE または /DELAYSIGN リンカー オプションを使用して、ソース コード ファイルをコンパイルします。 オプション名の後に、コロンと、キー ファイルの名前を追加します。 コマンド ライン コンパイラを使用する場合は、ソース コード ファイルを格納するディレクトリにキー ファイルをコピーできます。

遅延署名については、「アセンブリへの遅延署名」を参照してください。

次の例は、C# コンパイラを使用し、アセンブリ UtilityLibrary.dll にキー ファイル sgKey.snk を使用して厳密な名前で署名します。

csc /t:library UtilityLibrary.cs /keyfile:sgKey.snk

関連項目