You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.Net项目加载本地Nuget包提示强名称签名验证失败怎么办

本地构建Nuget包强名称签名报错修复方案

根因说明

官方源发布的对应包带合法强名称签名,你本地构建的版本要么未开启签名、要么使用了延迟签名未补全私钥、要么签名密钥与官方版本不一致,导致CLR运行时校验强名称不通过。

方案1:配置正确的强名称签名(推荐)

  • 如果你是该Nuget包的维护者,找到官方发布使用的.snk强名称密钥文件,存放到包项目根目录
  • 编辑包项目的.csproj文件,新增签名配置:
<PropertyGroup>
  <!-- 开启程序集签名 -->
  <SignAssembly>true</SignAssembly>
  <!-- 指定密钥文件路径 -->
  <AssemblyOriginatorKeyFile>你的密钥文件名称.snk</AssemblyOriginatorKeyFile>
  <!-- 关闭延迟签名 -->
  <DelaySign>false</DelaySign>
</PropertyGroup>
  • 若必须使用延迟签名,构建完成后需用SDK自带的sn.exe工具补全签名,执行命令:
    sn -R 生成的程序集路径.dll 你的私钥文件路径.snk
  • 重新打包生成Nuget包,卸载项目中原有的旧包后重新引入新包即可。

方案2:临时关闭强名称验证(仅本地调试使用,禁止上生产)

如果你无法获取官方签名密钥,仅需要本地调试修改后的包,可以单独为该程序集开强名称验证豁免:

  • 以管理员身份打开Visual Studio开发者命令提示符
  • 64位系统需分别针对32位、64位运行时添加豁免,执行命令:
:: 替换为实际的程序集名称
sn -Vr *,你的程序集名称
:: 若需指定公钥令牌,可先执行sn -T 你的程序集.dll查询公钥令牌后执行
sn -Vr *,你的程序集名称,PublicKeyToken=查询到的公钥令牌
  • 重启本地站点对应的IIS Express/Kestrel服务即可生效
  • 调试完成后可执行sn -Vu *,你的程序集名称移除豁免规则,规避安全风险

注意事项

  • 强名称验证是.NET运行时的安全校验机制,生产环境禁止关闭验证,务必使用官方签名的合法包
  • 若为第三方开源包,建议将你的修改提交到官方仓库,使用官方构建的发布版本,避免自行构建带来的签名兼容问题

内容的提问来源于stack exchange,提问作者Slava Podolskiy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 02:36:03