企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# Compiler Warning (level 1) CS1699 使用命令行选项“compiler_option”或适当项目设置代替“attribute_name” 为给程序集签名,必须指定密钥文件。在 Microsoft Visual C# 2005 之前,您在源代码中使用 CLR 特性指定了密钥文件。现在,这些特性都被否决了。 从 Microsoft Visual C# 2005 开始,您应使用**“项目设计器”**的**“签名页”**或程序集链接器指定密钥文件。 **“项目设计器”**的**“签名页”**是首选方法;有关更多信息,请参见 [“项目设计器”->“签名”页](https://msdn.microsoft.com/zh-cn/library/0k50fs3b.aspx) 和 [管理程序集签名和清单签名](https://msdn.microsoft.com/zh-cn/library/ms247066.aspx)。 [如何:使用强名称为程序集签名](https://msdn.microsoft.com/zh-cn/library/xc31ft41.aspx) 使用如下编译器选项: * [/keyfile (C# Compiler Options)](https://msdn.microsoft.com/zh-cn/library/w2kyay38.aspx) 代替 [AssemblyKeyFileAttribute](https://msdn.microsoft.com/zh-cn/library/system.reflection.assemblykeyfileattribute.aspx) 特性。 * [/keycontainer (C# Compiler Options)](https://msdn.microsoft.com/zh-cn/library/5b92wy0h.aspx) 而不是[AssemblyKeyNameAttribute](https://msdn.microsoft.com/zh-cn/library/system.reflection.assemblykeynameattribute.aspx)。 * [/delaysign (C# Compiler Options)](https://msdn.microsoft.com/zh-cn/library/ta1sxwy8.aspx) 代替 [AssemblyDelaySignAttribute](https://msdn.microsoft.com/zh-cn/library/system.reflection.assemblydelaysignattribute.aspx)。 否决这些特性的原因是: * 存在安全问题,因为这些特性嵌入在由编译器生成的二进制文件中。因此,每个拥有您的二进制文件的人都会获得存储在其中的密钥。 * 存在可用性问题,因为特性中指定的路径是相对于当前工作目录(此目录在集成开发环境 (IDE) 中可能会发生更改)或输出目录的。因此,大多数情况下密钥文件有可能是..\\..\\mykey.snk。特性还增加了项目系统为附属程序集正确签名的难度。当您使用编译器选项代替这些特性时,可以使用密钥的完全限定路径和文件名,而无需在输出文件中嵌入任何内容;项目系统和源代码管理系统可在项目移动时正确处理该完整路径;项目系统可保留密钥文件的项目相对路径,同时仍将完整路径传递给编译器;其他生成程序可通过直接将适当的路径传递给编译器(而不是用正确的特性生成源文件)更加容易地为输出签名。 * 将特性用于友元程序集会影响编译器的效率。当您使用特性时,编译器在必须决定是否授予友元关系时不知道密钥是什么,因此它必须进行推测。在编译的最后,一旦编译器最后知道了密钥,它就能够对推测进行验证。当使用编译器选项指定密钥文件时,编译器可立即决定是否授予友元关系。 下面的示例生成 CS1699。若要解决此错误,请移除该特性并使用 **/delaysign** 进行编译。 ``` // CS1699.cs // compile with: /target:library [assembly:System.Reflection.AssemblyDelaySign(true)] // CS1699 ``` ## 请参阅 [“项目设计器”->“签名”页](https://msdn.microsoft.com/zh-cn/library/0k50fs3b.aspx) [管理程序集签名和清单签名](https://msdn.microsoft.com/zh-cn/library/ms247066.aspx) [如何:使用强名称为程序集签名](https://msdn.microsoft.com/zh-cn/library/xc31ft41.aspx)