分享

C#中.snk文件的作用【转】

 ThinkTank_引擎 2014-07-24
 SNK,作为程序后缀的时候,是.net中的强密匙加密文件!

当你把一个程序集放进GAC(全局程序集缓存)时,就要加强名(也就是签名),在GAC中的程序集可以被所有程序引用访问(相当于以前COM组件在注册表里注册一样),如果不放进GAC,刚所有使用这个程序集都要复制这个程序集(也就是私有程序集),所以用不用强名要看情况而定.

如果不是 要把.dll共享 可以不使用强名
强名称是为了你的Dll文件的安全,一般我们的dll文件,随便在哪只要引用就可以用
但如果用了强名称的话,dll 就会有一个秘钥,其它人就不能引用了

如何创建带有强名称的程序集
可以向程序集分配称为强名称的加密签名,它为程序集提供名称的唯一性并防止他人借用您的程序集名称(名称欺骗)。如果您正在部署一个将被同一台计算机上的多个应用程序共享的程序集,则该程序集必须有强名称。即使只在您的应用程序中使用该程序集,使用强名称也可确保加载该程序集的正确版本。

生成具有强名称的程序集的第一步是获得加密密钥对。.NET Framework SDK 包括一个可用来生成密钥对的“强名称”工具 (Sn.exe)。由“强名称”工具生成的密钥对可以保留在文件中,您也可以将它存储在本地计算机的“加密服务提供程序”(CSP) 中。下面的命令使用“强名称”工具生成一个新的密钥对并将它存储在名为 TestKey.snk 的文件中:

sn -k Testkey.snk

在获得密钥对后,需要向源文件中添加正确的自定义属性,以便编译器发出带有强名称的程序集。根据用于签名的密钥对是包含在文件中还是 CSP 内的密钥容器中,正确地选择属性。对于存储在文件中的密钥,请使用 System.Reflection.AssemblyKeyFileAttribute。对于存储在 CSP 中的密钥,请使用 System.Reflection.AssemblyKeyNameAttribute

(*) 如果未指定密钥,则程序集不会被签名。
// (*) KeyName 是指已经安装在
// 计算机上的加密服务提供程序(CSP)中的密钥。KeyFile 是指包含
// 密钥的文件。
// (*) 如果 KeyFile 和 KeyName 值都已指定,则
// 发生下面的处理:
// (1) 如果在 CSP 中可以找到 KeyName,则使用该密钥。
// (2) 如果 KeyName 不存在而 KeyFile 存在,则
// KeyFile 中的密钥安装到 CSP 中并且使用该密钥。
// (*) 要创建 KeyFile,可以使用 sn.exe(强名称)实用工具。
// 在指定 KeyFile 时,KeyFile 的位置应该
// 相对于“项目输出目录”。项目输出
// 目录的位置取决于您是在使用本地项目还是 Web 项目。
// 对于本地项目,项目输出目录定义为
// <Project Directory>\obj\<Configuration>。例如,如果 KeyFile 位于该
// 项目目录中,应将 AssemblyKeyFile
// 属性指定为 [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
// 对于 Web 项目,项目输出目录定义为
// %HOMEPATH%\VSWebCache\<Machine Name>\<Project Directory>\obj\<Configuration>。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多