snk文件在.net里面被用作存放密钥或密钥对的存储文件,生成密钥对snk文件可以用.net中的sn.exe命令,如“sn -k keyPair.snk”。
snk本身只是用来存放非对称密钥的,但在各个需要用到加密、签名的地方都可以使用:
1) 用snk文件生成强命名程序集,这样一个assembly才可以被赋予full-trust属性,也可以被添加到GAC中。在VS.NET中生成 strong-named assembly,只需要在AssemblyInfo.cs里面添加一下代码并编译即可:
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("..\\..\\keyPair.snk")]
[assembly: AssemblyKeyName("")]
强 命名程序集的缘由: 目前Windows中出现的DLL Hell问题(两个不同的公司可能开发处具有相同名称的程序集,如果将相同名称的程序 集放置到同一个目录下,则会出现程序集覆盖现象,最后安装的程序集会覆盖前面的程序集,从而可能导致应用序不能正常运行)。由此看来,仅靠名称来区分程序 集是不足够的。CLR采取了强命名程序集的方式来唯一的表示程序集。强命名程序集包含四个标识:名称,版本号,语言文化标识和一个共有/私有密钥对。两种 程序集/两种部署方式:.Net支持两种程序集:弱命名程序集和强命名程序集(注:.Net框架中没有弱命名程序集,只是为了和强命名程序集相对应而 已)。弱命名程序集和强命名程序集在结构上是相同的。他们都采用PE文件格式,包含PE表头,CLR表头,元数据和清单表。区别在于:强命名程序集拥有一 个发布者的公钥/私钥签名对,他们用于唯一的标识程序集的发布者。通过公钥/私钥对,我们可以对程序集进行唯一的标识,安全策略和版本策略。
AssemblyInfo.cs主要用来设定生成的有关程序集的常规信息dll文件的一些参数
请看以下具体说明:
//备注:
[assembly:AssemblyDescription("用最强的抢劫类写成!")]
//产品名称
[assembly:AssemblyProduct("无为搜索")]
//公司
[assembly:AssemblyCompany("无为网络")]
//合法商标
[assembly:AssemblyTrademark("无为")];
//内部名称
[assembly:AssemblyCulture("")]
//设计者
[assembly:AssemblyDescription("无为类库")]
//版权
[assembly:AssemblyCopyright("")]
//配置文件
[assembly:AssemblyConfiguration("Configuration")]
//产品版品: 可指定,如下
// 程序集的版本信息由下列 4 个值组成:
//
// 主版本
// 次版本
// 内部版本号
// 修订号
//
// 您可以指定所有这些值,也可以使用“修订号”和“内部版本号”的默认值,方法是按
// 如下所示使用 '*':
[assembly:AssemblyVersion("1.0.*")]
生成dll文件以后再点击右键看看它的属性,你就为在里面看到熟悉的内容了
snk本身只是用来存放非对称密钥的,但在各个需要用到加密、签名的地方都可以使用:
1) 用snk文件生成强命名程序集,这样一个assembly才可以被赋予full-trust属性,也可以被添加到GAC中。在VS.NET中生成 strong-named assembly,只需要在AssemblyInfo.cs里面添加一下代码并编译即可:
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("..\\..\\keyPair.snk")]
[assembly: AssemblyKeyName("")]
强 命名程序集的缘由: 目前Windows中出现的DLL Hell问题(两个不同的公司可能开发处具有相同名称的程序集,如果将相同名称的程序 集放置到同一个目录下,则会出现程序集覆盖现象,最后安装的程序集会覆盖前面的程序集,从而可能导致应用序不能正常运行)。由此看来,仅靠名称来区分程序 集是不足够的。CLR采取了强命名程序集的方式来唯一的表示程序集。强命名程序集包含四个标识:名称,版本号,语言文化标识和一个共有/私有密钥对。两种 程序集/两种部署方式:.Net支持两种程序集:弱命名程序集和强命名程序集(注:.Net框架中没有弱命名程序集,只是为了和强命名程序集相对应而 已)。弱命名程序集和强命名程序集在结构上是相同的。他们都采用PE文件格式,包含PE表头,CLR表头,元数据和清单表。区别在于:强命名程序集拥有一 个发布者的公钥/私钥签名对,他们用于唯一的标识程序集的发布者。通过公钥/私钥对,我们可以对程序集进行唯一的标识,安全策略和版本策略。
AssemblyInfo.cs主要用来设定生成的有关程序集的常规信息dll文件的一些参数
请看以下具体说明:
//备注:
[assembly:AssemblyDescription("用最强的抢劫类写成!")]
//产品名称
[assembly:AssemblyProduct("无为搜索")]
//公司
[assembly:AssemblyCompany("无为网络")]
//合法商标
[assembly:AssemblyTrademark("无为")];
//内部名称
[assembly:AssemblyCulture("")]
//设计者
[assembly:AssemblyDescription("无为类库")]
//版权
[assembly:AssemblyCopyright("")]
//配置文件
[assembly:AssemblyConfiguration("Configuration")]
//产品版品: 可指定,如下
// 程序集的版本信息由下列 4 个值组成:
//
// 主版本
// 次版本
// 内部版本号
// 修订号
//
// 您可以指定所有这些值,也可以使用“修订号”和“内部版本号”的默认值,方法是按
// 如下所示使用 '*':
[assembly:AssemblyVersion("1.0.*")]
生成dll文件以后再点击右键看看它的属性,你就为在里面看到熟悉的内容了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现