CA2210: アセンブリには有効な厳密な名前が必要です
TypeName |
AssembliesShouldHaveValidStrongNames |
CheckId |
CA2210 |
[カテゴリ] |
Microsoft.Design |
互換性に影響する変更点 |
なし |
原因
アセンブリが厳密な名前で署名されていないか、厳密な名前を検証できません。またはコンピューターの現在のレジストリ設定が不適切であるため厳密な名前が有効ではありません。
規則の説明
この規則は、アセンブリの厳密な名前を取得して検証します。次のいずれかの条件が当てはまる場合、違反が発生します。
アセンブリに厳密な名前がありません。
署名後にアセンブリが変更されました。
アセンブリは遅延署名されています。
アセンブリの署名が不適切であるか、署名に失敗しました。
アセンブリには、検証に適合するレジストリ設定が必要です。たとえば、アセンブリの検証を省略するときに厳密名ツール (Sn.exe) が使用されました。
厳密な名前によって、改ざんされたアセンブリを、クライアントが無意識のうちに読み込む問題を防ぐことができます。厳密な名前のないアセンブリが配置される状況は、限定されます。適切に署名されていないアセンブリを共有または配布すると、アセンブリが改ざんされる場合、共通言語ランタイムでアセンブリを読み込むことができない場合、またはユーザーのコンピューターで検証を無効にする必要がある場合などの問題が考えられます。厳密な名前のないアセンブリには、次の欠点があります。
出所を検証できません。
アセンブリの内容が変更されたかどうかについて、共通言語ランタイムでユーザーに警告できません。
グローバル アセンブリ キャッシュに読み込むことができません。
遅延署名されたアセンブリを読み込んで解析する場合、アセンブリの検証を無効にする必要があることに注意してください。
違反の修正方法
キー ファイルを作成するには
次のいずれかの手順を実行します。
.NET Framework SDK に付属するアセンブリ リンカー ツール (Al.exe) を使用します。
.NET Framework Version 1.0 または Version 1.1 の場合、System.Reflection.AssemblyKeyFileAttribute 属性または System.Reflection.AssemblyKeyNameAttribute 属性を使用します。
.NET Framework 2.0 の場合、/keyfile または /keycontainer のいずれかのコンパイラ オプション /KEYFILE (アセンブリに署名するためのキーまたはキー ペアの指定) または /KEYCONTAINER (アセンブリに署名するためのキー コンテナーの指定) リンカー オプションを C++ では使用) を使用します。
Visual Studio を使用してアセンブリに厳密な名前で署名するには
Visual Studio で、ソリューションを開きます。
ソリューション エクスプローラーで、プロジェクトを右クリックし、[プロパティ] をクリックします。
[署名] タブをクリックし、[アセンブリの署名] チェック ボックスをオンにします。
[厳密な名前のキー ファイルを選択してください] で [新規] を選択します。
[厳密な名前キーの作成] ウィンドウが表示されます。
[キー ファイル] ボックスに厳密な名前キーの名前を入力します。
このキーをパスワードで保護するかどうかを選択し、[OK] をクリックします。
ソリューション エクスプローラーで、プロジェクトを右クリックし、[ビルド] をクリックします。
Visual Studio 以外のアプリケーションを使用してアセンブリに厳密な名前で署名するには
- .NET Framework SDK に付属する厳密名ツール (Sn.exe) を使用します。詳細については、「Sn.exe (厳密名ツール)」を参照してください。
警告を抑制する状況
アセンブリの改ざんが問題にならない環境でアセンブリを使用する場合のみ、この規則による警告を抑制します。