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

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

アセンブリに署名するには、キー ファイルを指定する必要があります。In order to sign an assembly, it is necessary to specify a key file. C# 2.0 より前のバージョンでは、ソース コードで CLR 属性を使用して、キー ファイルを指定していました。Prior to C# 2.0, you specified the key file using CLR attributes in source code. これらの属性は非推奨となりました。These attributes are now deprecated.

C# 2.0 からは、プロジェクト デザイナー[署名] ページまたはアセンブリ リンカーを使用して、キー ファイルを指定します。Beginning with C# 2.0, you should use the Signing Page of the Project Designer or the Assembly Linker to specify the key file.

プロジェクト デザイナーの [署名] ページを使用することをお勧めします。詳細については、「[署名] ページ (プロジェクト デザイナー)」および「アセンブリおよびマニフェストへの署名の管理」を参照してください。The Signing Page of the Project Designer is the preferred method; for more information, see Signing Page, Project Designer and Managing Assembly and Manifest Signing.

方法: 厳密な名前でアセンブリに署名する」では、次のコンパイラ オプションを使用します。The How to: Sign an Assembly with a Strong Name uses the following compiler options:

これらの属性が非推奨とされた背景には、次のような経緯があります:These attributes have been deprecated for the following reasons:

  • コンパイラによって生成されたバイナリ ファイルに埋め込まれている属性に起因するセキュリティ上の問題が生じていました。There were security issues due to the attributes being embedded in the binary files produced by the compiler. バイナリ ファイルを入手した人であれば誰でも、そこに保存されているキーを入手できました。Everyone who had your binary also had the keys stored in it.

  • 現在の作業ディレクトリ (統合開発環境 (IDE) で変更される可能性がある)、または出力ディレクトリへの相対パスを属性の指定に使用していたことから生じる利便性の問題もありました。There were usability issues due to the fact that the path specified in the attributes was relative to the current working directory, which could change in the integrated development environment (IDE), or to the output directory. このため、通常は、キー ファイルは \\..\\mykey.snk となっています。Thus, most times the key file is likely to be ..\\..\\mykey.snk. また、属性で指定することは、プロジェクト システムがサテライト アセンブリに適切に署名する障害にもなります。Attributes also make it more difficult for the project system to properly sign satellite assemblies. こうした属性の代わりに、コンパイラ オプションを使用すれば、キーの完全修飾パスとファイル名を使用でき、出力ファイルに何も埋め込む必要がありません。プロジェクトが移動されたとしても、プロジェクト システムとソース コード管理システムは、その完全なパスを適切に操作できます。プロジェクト システムは、キー ファイルに対するプロジェクトの相対パスを維持したまま、完全なパスをコンパイラに渡すことができます。他のビルド プログラムは、正しい属性が指定されたソース ファイルを生成する代わりに、適切なパスを直接コンパイラに渡すことによって、より簡単に出力ファイルに署名できます。When you use the compiler options instead of these attributes, you can use a fully qualified path and file name for the key without anything being embedded in the output file; the project system and source code control system can properly manipulate that full path when projects are moved around; the project system can maintain a project-relative path to the key file, and still pass a full path to the compiler; other build programs can more easily sign outputs by passing the proper path directly to the compiler instead of generating a source file with the correct attributes.

  • フレンド アセンブリで属性を使用すると、コンパイラの効率を損なう場合があります。Using attributes with friend assemblies can hamper compiler efficiency. 属性を使用する場合、コンパイラがフレンドシップを付与するかどうかを判断する段階では、キーが何であるかを確認できず、コンパイラが推論する必要が生じます。When you use attributes, the compiler does not know what the key is when it has to decide whether or not to grant friendship and so it has to guess. コンパイルの最後で、キーが何であるかをコンパイラが確認した段階で初めて、推論が正しかったかどうかを検証できます。At the end of compilation, the compiler is able to verify the guess once it finally knows the key. キー ファイルをコンパイラ オプションで指定する場合、フレンドシップを付与する必要があるかどうかをコンパイラはすぐに判断できます。When the key file is specified with a compiler option, the compiler can immediately decide whether to grant friendship.

Example

次の例では、CS1699 エラーが生成されます。The following sample generates CS1699. このエラーを解決するには、属性を削除し、 /delaysign を使用してコンパイルします。To resolve the error, remove the attribute and compile with /delaysign.

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

参照See also