未使用Microsoft.Data.SqlClient却在VS2022中遭遇可信证书错误
问题分析与解决方案
一、未手动引用却出现Microsoft.Data.SqlClient的原因
即使项目未直接引用Microsoft.Data.SqlClient,以下场景会导致该驱动被加载:
- Visual Studio设计时工具依赖:VS 2022的类型化数据集设计器、EF6模型创建向导(新增模型时),底层已切换为
Microsoft.Data.SqlClient来连接数据库读取元数据,这和项目运行时使用的System.Data.SqlClient完全独立。调试时程序用的是项目配置的驱动,而设计工具用的是VS内置的Microsoft.Data.SqlClient。 - 传递依赖:项目中某些NuGet包(比如EF6的扩展库、第三方数据工具包)可能间接引用了
Microsoft.Data.SqlClient,设计时工具会加载这些传递过来的程序集。 - GAC全局程序集缓存:
Microsoft.Data.SqlClient可能被安装到了系统GAC中,VS设计工具会优先从GAC加载该驱动,无需项目显式引用。
二、针对性解决办法
1. 设计时连接字符串手动配置
修改类型化数据集或创建EF模型时,在弹出的数据库连接配置对话框中:
- 进入“高级”设置,勾选「信任服务器证书」(对应
trustServerCertificate=true),同时设置「加密」为False。 - 不要仅修改项目配置文件中的连接字符串,因为设计工具使用的是临时生成的连接参数,和项目运行时配置不共享。
2. 强制VS设计工具禁用加密
修改VS的配置文件(devenv.exe.config),路径示例:C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE(根据你的VS版本替换Community为Professional或Enterprise):
在<configuration>节点下添加以下配置:
<system.data> <DbProviderFactories> <remove invariant="Microsoft.Data.SqlClient" /> <add name="Microsoft Data SqlClient" invariant="Microsoft.Data.SqlClient" description=".NET Framework Data Provider for SqlServer" type="Microsoft.Data.SqlClient.SqlClientFactory, Microsoft.Data.SqlClient" /> </DbProviderFactories> </system.data> <appSettings> <add key="Microsoft.Data.SqlClient.Encrypt" value="false" /> </appSettings>
修改后重启VS,设计工具会默认使用Encrypt=False连接数据库。
3. 清理GAC中的冲突版本
打开命令提示符(管理员权限),执行以下命令查看GAC中的Microsoft.Data.SqlClient版本:
gacutil /l Microsoft.Data.SqlClient
如果存在多个版本,卸载非必要的版本:
gacutil /u Microsoft.Data.SqlClient, Version=xxx.xxx.xxx.xxx, Culture=neutral, PublicKeyToken=23ec7fc2d6eaa4a5
替换Version为具体版本号。
4. 回退VS版本
如果确认是VS 17.9.6的版本bug,可暂时回退到17.8.x系列稳定版本,待微软修复后再升级。
内容的提问来源于stack exchange,提问作者reuben42
相关产品推荐
相关产品推荐

