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

VB.NET Framework4.8 MVC项目缺失Microsoft.Data.SqlClient.SNI.x86.dll求助

问题

我的所有ASP.NET MVC网站突然抛出错误:

System.DllNotFoundException: 无法加载'Microsoft.Data.SqlClient.SNI.x86.dll',找不到该文件。

环境差异:

  • VB.NET Framework 4.8的WinForms项目使用Microsoft.Data.SqlClient完全正常
  • 同版本的ASP.NET MVC项目仅在我的个人电脑上失败,测试电脑运行一切正常

测试步骤:

  1. 创建VB.NET Framework4.8 Web MVC应用
  2. 添加Microsoft.Data.SqlClient NuGet包并更新至最新版本
  3. 在HomeController的Index方法中添加数据库连接代码:
Dim cnn As New SqlConnection("Data Source=MySever;Initial Catalog=MyDb;Persist Security Info=True; Integrated Security=true; application name=abc; Min Pool Size=1; Connection Timeout=30;TrustServerCertificate=True;") 
cnn.Open()
  1. 运行应用触发错误

完整HomeController代码:

Imports Microsoft.Data.SqlClient

Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index() As ActionResult
        Dim cnn As New SqlConnection("Data Source=MyServer;Initial Catalog=MyDb;Persist Security Info=True; User ID=xx;Password=xx; application name=MyApp; Min Pool Size=1; Connection Timeout=30; TrustServerCertificate=True;")
        cnn.Open()
        Return View()
    End Function

    Function About() As ActionResult
        ViewData("Message") = "Your application description page."

        Return View()
    End Function

    Function Contact() As ActionResult
        ViewData("Message") = "Your contact page."

        Return View()
    End Function
End Class

关键现象:Bin文件夹中存在Microsoft.Data.SqlClient.SNI.x86.dll和Microsoft.Data.SqlClient.SNI.x64.dll,但进程监视器显示程序未在Bin文件夹中查找该文件。


可能的原因与解决方案

1. IIS应用程序池位数与DLL不匹配

ASP.NET MVC运行在IIS应用程序池下,如果应用程序池的位数设置与SNI DLL的位数不匹配,会导致系统去错误路径查找文件:

  • 若应用程序池启用32位模式,系统优先找x86版本,但可能因IIS搜索路径优先级问题,跳过Bin目录
  • 若应用程序池为64位模式,却尝试加载x86 DLL也会触发错误

解决方法:

  • 打开IIS管理器,找到对应网站的应用程序池,右键选择「高级设置」
  • 调整「启用32位应用程序」选项:
    • 若Bin目录同时有x86和x64 DLL,可分别设置为True或False测试,选择能正常加载的模式
  • 重启应用程序池和网站

2. 全局程序集缓存(GAC)存在冲突版本

如果个人电脑GAC中安装了旧版本或不兼容的Microsoft.Data.SqlClient.SNI程序集,ASP.NET运行时会优先加载GAC中的版本,而非Bin目录内的文件,导致版本不匹配或找不到DLL。

解决方法:

  • 以管理员权限打开命令提示符,执行以下命令查看GAC中的SNI程序集:
    gacutil /l Microsoft.Data.SqlClient.SNI
    
  • 若找到相关条目,执行卸载命令(替换版本号为实际值):
    gacutil /u Microsoft.Data.SqlClient.SNI, Version=xxx.xxx.xxx.xxx, Culture=neutral, PublicKeyToken=23ec7fc2d6eaa4a5
    
  • 清理项目Bin和Obj目录,重新生成解决方案

3. ASP.NET影子复制机制导致路径异常

ASP.NET默认启用影子复制,会将Bin目录文件复制到临时目录(如C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files)运行。若复制过程中SNI DLL未被正确同步,就会出现找不到文件的情况。

解决方法:

  • 清理临时ASP.NET文件:
    1. 以管理员权限打开命令提示符,执行:
      rmdir /s /q C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\你的网站应用名
      
    2. 重启IIS和应用程序池
  • 可临时在Web.config中禁用影子复制测试(测试后建议改回默认值):
    <configuration>
      <system.web>
        <hostingEnvironment shadowCopyBinAssemblies="false" />
      </system.web>
    </configuration>
    

4. NuGet包安装/更新不完整

尽管更新了NuGet包,但ASP.NET项目的包引用可能未正确同步,导致SNI DLL的复制属性未设置正确(WinForms项目默认会复制依赖DLL,但ASP.NET项目存在差异)。

解决方法:

  • 卸载Microsoft.Data.SqlClient NuGet包,清理项目Bin和Obj目录
  • 重新安装与测试电脑版本一致的Microsoft.Data.SqlClient包(不盲目追求最新版)
  • 检查项目引用中Microsoft.Data.SqlClient.SNI的属性,确保「复制本地」设置为True
  • 重新生成项目

5. 本地IIS或.NET Framework环境损坏

测试电脑正常但个人电脑异常,可能是本地.NET Framework或IIS相关组件损坏,导致无法正确加载DLL。

解决方法:

  • 修复.NET Framework 4.8:打开「控制面板」→「程序和功能」→找到「Microsoft .NET Framework 4.8」→选择「更改」→点击「修复」
  • 重置IIS:以管理员权限打开命令提示符,执行:
    iisreset /stop
    iisreset /start
    
  • 安装最新的.NET Framework和IIS相关Windows更新

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 11:50:05