コンパイラの警告 (レベル 1) CS1699

コマンド ライン オプション "compiler_option" を使用するか、"attribute_name" 以外の適切なプロジェクト設定を使用してください。

アセンブリに署名するには、キー ファイルを指定する必要があります。 C# 2.0 より前のバージョンでは、ソース コードで CLR 属性を使用して、キー ファイルを指定していました。 これらの属性は非推奨となりました。

C# 2.0 からは、プロジェクト デザイナー[署名] ページまたはアセンブリ リンカーを使用して、キー ファイルを指定します。

プロジェクト デザイナーの [署名] ページを使用することをお勧めします。詳細については、「[署名] ページ (プロジェクト デザイナー)」および「アセンブリおよびマニフェストへの署名の管理」を参照してください。

方法: 厳密な名前でアセンブリに署名する」では、次のコンパイラ オプションを使用します。

これらの属性が非推奨とされた背景には、次のような経緯があります:

  • コンパイラによって生成されたバイナリ ファイルに埋め込まれている属性に起因するセキュリティ上の問題が生じていました。 バイナリ ファイルを入手した人であれば誰でも、そこに保存されているキーを入手できました。

  • 現在の作業ディレクトリ (統合開発環境 (IDE) で変更される可能性がある)、または出力ディレクトリへの相対パスを属性の指定に使用していたことから生じる利便性の問題もありました。 このため、通常は、キー ファイルは ..\\..\\mykey.snk となっています。 また、属性で指定することは、プロジェクト システムがサテライト アセンブリに適切に署名する障害にもなります。 こうした属性の代わりに、コンパイラ オプションを使用すれば、キーの完全修飾パスとファイル名を使用でき、出力ファイルに何も埋め込む必要がありません。プロジェクトが移動されたとしても、プロジェクト システムとソース コード管理システムは、その完全なパスを適切に操作できます。プロジェクト システムは、キー ファイルに対するプロジェクトの相対パスを維持したまま、完全なパスをコンパイラに渡すことができます。他のビルド プログラムは、正しい属性が指定されたソース ファイルを生成する代わりに、適切なパスを直接コンパイラに渡すことによって、より簡単に出力ファイルに署名できます。

  • フレンド アセンブリで属性を使用すると、コンパイラの効率を損なう場合があります。 属性を使用する場合、コンパイラがフレンドシップを付与するかどうかを判断する段階では、キーが何であるかを確認できず、コンパイラが推論する必要が生じます。 コンパイルの最後で、キーが何であるかをコンパイラが確認した段階で初めて、推論が正しかったかどうかを検証できます。 キー ファイルをコンパイラ オプションで指定する場合、フレンドシップを付与する必要があるかどうかをコンパイラはすぐに判断できます。

次の例では、CS1699 エラーが生成されます。 このエラーを解決するには、属性を削除し、/delaysign を使用してコンパイルします。

// CS1699.cs  
// compile with: /target:library  
[assembly:System.Reflection.AssemblyDelaySign(true)]   // CS1699  

関連項目