📜  GAC 文件夹没有公钥令牌 (1)

📅  最后修改于: 2023-12-03 15:30:52.576000             🧑  作者: Mango

GAC 文件夹没有公钥令牌

当你在开发一个.NET程序时,可能会遇到一个错误信息:“GAC 文件夹没有公钥令牌”。这个错误很常见,特别是在使用GAC (Global Assembly Cache) 的时候。

什么是GAC

GAC是全局程序集缓存。当你安装.NET程序时,它的程序集文件可以被放到GAC,这样所有是安装在同一台机器上的程序都可以共享这个程序集。这个机制被设计为支持多版本程序集的共存和互用。

GAC 文件夹没有公钥令牌的原因

在.NET框架中,程序集的签名信息被包含在公钥令牌(token)中。当一个程序集被放到GAC中时,它的签名信息将一并存储。然而,如果你忘记了在打包程序集时为它签名,或者签名信息出错了,那么程序在被放到GAC时就会报错“GAC 文件夹没有公钥令牌”。

如何解决GAC 文件夹没有公钥令牌的问题

正确的解决方法当然是为程序集签名。签名的方式可以使用Visual Studio自带的工具,也可以使用sn.exe工具。

使用Visual Studio签名
  1. 打开你的解决方案
  2. 选择要签名的项目
  3. 在项目属性中,选择“签名”选项卡
  4. 选择“在项目文件中创建新的强名称密钥文件”选项
  5. 点击“浏览”按钮选择密钥文件名称
  6. 点击“确定”
使用sn.exe签名
  1. 打开命令提示符
  2. 将目录切换到待签名程序集所在目录
  3. 输入以下命令:

sn -k key.snk

这会生成一个密钥文件,可以替换key.snk为任何其他名称

  1. 输入以下命令:

sn -i key.snk My

这会将公钥令牌添加到程序集中,替换My为你的程序集名称

结论

为.Net程序做好签名工作对于程序的正确运行和安全性都非常重要。当碰到了“GAC 文件夹没有公钥令牌”的错误时,我们需要及时为程序集签名,避免后续的错误和风险。