从 .net core 3.0 迁移到 3.1 会导致缺少 System.Data.SqlClient 程序集错误



我有一个引用.net框架库的.net核心项目。框架库使用System.Data.SqlClient来访问数据库。当核心项目在dotnet core 3.0上运行时,一切正常。但是,我刚刚迁移到3.1,现在出现以下异常:

FileNotFoundException: Could not load file or assembly 'System.Data.SqlClient, Version=4.6.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified.

我尝试通过框架库中的 Nuget 显式安装System.Data.SqlClientv. 4.6.0,但我仍然收到相同的异常。

tl;dr:将Microsoft.Windows.Compatibility元包安装到您的核心/标准项目中以解决此问题。


您在错误消息中看到的版本是 .NET Framework 项目所需的程序集版本。这对应于编译所述项目的 .NET Framework 版本附带的版本。

由于 .NET Core(和 Standard(远不如 Framework 紧密耦合,因此以前属于框架的许多命名空间已分解为自己的 NuGet 包。System.Data.SqlClient就是其中之一,因此答案是将该包的相应版本安装到 .NET 核心/标准项目中...右?

是的,但这不是最好的答案。

由于 SqlClient 是独立于其 NuGet 包开发的,因此该库的程序集版本与其包的版本不同,实际上,这些版本不能仅通过检查它们来关联。确定哪个版本对应于哪个包的唯一方法是手动检查 NuGet 包版本,并将它们与这些包中包含的 DLL 的程序集版本进行比较 - 我已经在下表中完成了艰苦的工作,因此您不必这样做。其他命名空间和包可能会发生类似的疯狂。

然而!

Microsoft 使上述痛苦在Microsoft.Windows.Compatibility元包中完全没有必要。如果将其安装到核心/标准项目中,则将拉入框架项目所依赖的所有包的正确版本。不仅如此,如果您更改了 Framework 项目中的版本,则下次执行构建时将拉入依赖包的相应更新版本

这比手动引用所需的特定包(例如System.Data.SqlClient(要好得多,因为如果您安装这些包的特定版本并更改了框架版本,则在运行时会再次中断。这只是为了痛苦而不必要的痛苦。

所以,安装Microsoft.Windows.Compatibility,告别版本控制地狱!

System.Data.SqlClient 版本的参考列表

|NuGet 包版本 |组装版本 |文件版本 | |-----------------------|------------------|----------------| |                4.8.1 |         4.6.1.1 |4.700.20.6702 | |                4.8.0 |         4.6.1.0 |4.700.19.56404 | |                4.7.0 |         4.6.0.0 |4.700.19.46214 | |                4.6.1 |         4.5.0.1 |4.6.27618.01 | |                4.6.0 |         4.5.0.0 |4.6.27110.04 | |                4.5.3 |         4.4.0.1 |4.6.28516.10 | |                4.5.1 |         4.4.0.0 |4.6.26606.05 | |                4.5.0 |         4.4.0.0 |4.6.26515.06 | |                4.4.3 |         4.2.0.2 |4.6.26212.01 | |                4.4.2 |         4.2.0.1 |4.6.25921.02 | |                4.4.1 |         4.2.0.1 |4.6.25706.01 | |                4.4.0 |         4.2.0.0 |4.6.25519.03 | |                4.3.1 |         4.1.1.1 |4.6.25220.01 | |                4.3.0 |         4.1.1.0 |4.6.24705.01 | |                4.1.0 |         4.1.0.0 |1.0.24212.01 |

您可能不再坚持这一点,但对我来说,将System.Data.SqlClient从 4.7 升级到 4.8.1 解决了这个问题。

我以前曾尝试卸载并重新安装 4.7,但没有任何运气。

相关内容

最新更新