从.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
问题描述
我有一个引用.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.SqlClient
v4.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屋!