次の方法で共有


方法: 公開キーと秘密キーのペアを作成する

厳密な名前でアセンブリに署名するには、公開キーと秘密キーのペアが必要です。 この公開と秘密の暗号化キーのペアは、厳密な名前のアセンブリを作成するためにコンパイル中に使用されます。 キー ペアは、 厳密な名前ツール (Sn.exe) を使用して作成できます。 通常、キー ペア ファイルの拡張子は .snk です

.NET (.NET Core および .NET 5 以降) では、厳密な名前にはランタイム検証がありません。 厳密な名前の署名は、主に .NET Framework と .NET Standard 2.0 の相互運用シナリオに関連しています。 .NET Framework をターゲットにしていない場合は、通常、組織またはコンシューマーがアセンブリを要求しない限り、アセンブリに厳密な名前を付ける必要はありません。

Visual Studio、C# および Visual Basic プロジェクトのプロパティ ページには、Signing タブが含まれており、既存のキー ファイルを選択したり、Sn.exe を使用せずに新しいキー ファイルを生成したりできます。 Visual C++ では、[プロパティ ページ] ウィンドウの [構成プロパティ] セクションの [リンカー] セクションの [詳細] プロパティ ページで、既存のキー ファイルの場所を指定できます。 AssemblyKeyFileAttribute 属性を使用してキー ファイルのペアを識別する方法は、Visual Studio 2005 以降では廃止されました。

キー ペアを作成する

Sn.exeは、オペレーティング システム上の .NET SDK には含まれません。 Visual Studioまたは Windows SDK をインストールして取得するWindowsでのみ使用できます。

キー ペアを作成するには、コマンド プロンプトで次のコマンドを入力します。

sn –k<ファイル名>

このコマンドでは、 ファイル名 はキー ペアを含む出力ファイルの名前です。

次の例では、 sgKey.snk という名前のキー ペアを作成します。

sn -k sgKey.snk

アセンブリへの署名を遅らせ、キー ペア全体を制御する場合 (テスト シナリオの範囲外ではありそうもない)、次のコマンドを使用してキー ペアを生成し、そこから公開キーを別のファイルに抽出できます。 まず、キー ペアを作成します。

sn -k keypair.snk

次に、キー ペアから公開キーを抽出し、別のファイルにコピーします。

sn -p keypair.snk public.snk

キー ペアを作成したら、そのファイルを厳密な名前署名ツールが見つけられる場所に配置する必要があります。

アセンブリに厳密な名前で署名すると、 アセンブリ リンカー (Al.exe) は、現在のディレクトリと出力ディレクトリを基準にしてキー ファイルを検索します。 コマンド ライン コンパイラを使用する場合は、コード モジュールを含む現在のディレクトリにキーをコピーするだけです。

プロジェクトのプロパティに Signing タブがない以前のバージョンのVisual Studioを使用している場合、推奨されるキー ファイルの場所は、ファイル属性が次のように指定されたプロジェクト ディレクトリです。

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

こちらも参照ください