Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 从.net core 3.0迁移到3.1会导致缺少System.Data.SqlClient程序集错误_Asp.net Core_Asp.net Core 3.1 - Fatal编程技术网

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

Asp.net core 从.net core 3.0迁移到3.1会导致缺少System.Data.SqlClient程序集错误,asp.net-core,asp.net-core-3.1,Asp.net Core,Asp.net Core 3.1,我有一个.net核心项目,它引用了一个.net框架库。框架库使用System.Data.SqlClient访问数据库。当核心项目在dotnetcore3.0上运行时,一切正常。但是,我刚刚迁移到3.1,现在我得到了以下异常: FileNotFoundException: Could not load file or assembly 'System.Data.SqlClient, Version=4.6.0.0, Culture=neutral, PublicKeyToken=b03f5f7f1

我有一个.net核心项目,它引用了一个.net框架库。框架库使用System.Data.SqlClient访问数据库。当核心项目在dotnetcore3.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.

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

您可能不再停留在这个问题上,但对我来说,将System.Data.SqlClient从4.7升级到4.8.1解决了这个问题


我之前曾尝试过卸载并重新安装4.7,但运气不好。

您可能不再被困在这个问题上,但对我来说,将System.Data.SqlClient从4.7升级到4.8.1解决了这个问题

我以前曾尝试过卸载并重新安装4.7,但运气不佳。

tl;dr:将元包安装到核心/标准项目中以修复此问题

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

由于.NETCore和Standard之间的耦合远不如Framework紧密,许多以前属于该框架的名称空间已经被分解成它们自己的NuGet包。System.Data.SqlClient就是其中之一,因此答案是将该包的适当版本安装到.NET核心/标准项目中。。。对吧?

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

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

然而

微软已经使上述痛苦完全不必要的元软件包。如果将其安装到核心/标准项目中,框架项目所依赖的所有软件包的正确版本都将被引入。不仅如此,如果您在框架项目中更改了版本,那么在下次进行构建时,相关包的相应更新版本将被拉入

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

所以,安装,并说再见版本地狱

System.Data.SqlClient版本的参考列表 tl;dr:将元包安装到核心/标准项目中以修复此问题

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

由于.NETCore和Standard之间的耦合远不如Framework紧密,许多以前属于该框架的名称空间已经被分解成它们自己的NuGet包。System.Data.SqlClient就是其中之一,因此答案是将该包的适当版本安装到.NET核心/标准项目中。。。对吧?

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

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

然而

微软已经使上述痛苦完全不必要的元软件包。如果将其安装到核心/标准项目中,框架项目所依赖的所有软件包的正确版本都将被引入。不仅如此,如果您在框架项目中更改了版本,那么在下次进行构建时,相关包的相应更新版本将被拉入

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

所以,安装,并说再见版本地狱

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 |