Asp.Net MVC添加NuGet包Microsoft.SqlServer.SqlManagementObjects后出现签名验证错误
这个问题我之前帮同事排查过,大概率是NuGet包依赖的组件没装全或者强名称签名验证出了问题,给你几个靠谱的解决步骤:
安装对应版本的SQL Server Feature Pack组件
SqlManagementObjects(SMO)的NuGet包依赖SQL Server的系统级共享组件,光靠NuGet有时候拉不全。你用的是140.17235.0版本(对应SQL Server 2017),安装对应版本的SQL Server Feature Pack里的「Microsoft SQL Server Management Objects」组件,它会把包括Microsoft.SqlServer.XEvent.Linq在内的所有依赖组件注册到GAC里。临时禁用强名称验证(仅测试环境用)
如果确定组件没被篡改,只是签名验证卡壳了,可以用强名称工具跳过验证。以管理员身份打开命令提示符,运行:sn -Vr *,89845dcd8080cc91这个公钥是SQL Server官方组件通用的,执行完重启Visual Studio和你的应用,应该能绕过这个错误。注意生产环境别这么干,有安全风险。
清理并重新还原NuGet包
本地缓存的NuGet包可能损坏导致签名异常,试试这几步:- 删除项目目录下的
packages文件夹 - 删除解决方案根目录的
packages文件夹(如果存在) - 在Visual Studio里右键解决方案,选择「还原NuGet包」
- 重新生成整个解决方案
- 删除项目目录下的
检查项目目标框架兼容性
140版本的SMO包要求.NET Framework 4.6.1及以上,确认你的ASP.NET MVC项目目标框架符合要求。如果是更低版本,要么升级框架,要么换对应版本的SMO包。手动添加缺失的程序集引用
如果NuGet没自动引入Microsoft.SqlServer.XEvent.Linq,可以手动操作:- 右键项目→添加→引用→浏览,找到GAC里的对应版本组件(安装Feature Pack后会在GAC里)
- 或者直接在NuGet包管理器里搜索
Microsoft.SqlServer.XEvent.Linq,安装和SMO包版本一致的版本
内容的提问来源于stack exchange,提问作者muxdaddy

