从.Net core 3.0迁移到3.1导致缺少System.Data.SqlClient程序集错误 [英] Migrating from .net core 3.0 to 3.1 causes missing System.Data.SqlClient assembly error

查看:0
本文介绍了从.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.SqlClientv4.6.0,但仍收到相同的异常。

推荐答案

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


您在错误消息中看到的版本是.NET框架项目预期的程序集版本。这与编译该项目时所依据的.NET框架版本附带的版本相对应。

由于.NET核心(和标准)的耦合远不如框架紧密,许多以前是框架一部分的命名空间都被拆分到各自的NuGet包中。System.Data.SqlClient就是其中之一,所以答案是将该包的适当版本安装到您的.NET Core/Standard项目中...对吗?

是,但这不是最佳答案。

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

但是!

Microsoft已通过Microsoft.Windows.Compatibility元包使上述完全不必要的。如果您将其安装到您的Core/Standard项目中,您的框架项目所依赖的所有包的正确版本将被拉入。不仅如此,如果您更改了框架项目中的版本,下次生成时将拉入依赖包的相应更新版本

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

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

System.Data.SqlClient版本参考列表

| NuGet package version | Assembly version | File version   |
|-----------------------|------------------|----------------|
|                 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   |

这篇关于从.Net core 3.0迁移到3.1导致缺少System.Data.SqlClient程序集错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆