调用类库我得到错误 system.data.sqlclient is not supported on this platform

问题描述

这是我收到此错误时的设置:

基于 Core 3.1 和控制台应用程序类型的项目“main”。没有对 System.Data.sqlClient 的引用,也不需要。

它也基于类型类库的 Core 3.1 调用项目“进程”。没有对 System.Data.sqlClient 的引用,也不需要。

“进程”调用基于类型类库的Core 3.1的项目“服务”。这个项目需要 System.Data.sqlClient 并且引用了一个包“System.Data.sqlClient (4.5.1)”。

调试“main”时,到“service”时,第一次引用sqlConnection,报错“system.data.sqlclient is not supported on this platform”

为什么会出现此错误以及如何解决

注意:当我在项目“main”中添加对 System.Data.sqlClient 的引用时 - 没有错误,但当然“main”不需要 System.Data.sqlClient,它不应该有。

当我使用 xUnit 测试“服务”时,没有错误,它工作正常

谢谢

解决方法

根据document

Microsoft.Data.SqlClient NuGet 包包含许多 DLL 支持不同的 .NET 目标和不同的运行时平台。如果 当您不认为时,您会收到 PlatformNotSupported 异常 你应该是,这最终意味着你的应用程序没有加载 适当的 DLL。这可能有多种原因。这 NuGet 包结构和基础设施围绕引用和 加载引用的 NuGet 包包括允许包的逻辑 包含实现对不同 .NET 支持的多个 DLL 和平台目标。 .NET Framework 的不同 DLL,.NET Core、.NET Standard、Windows、Linux 等。 NuGet 基础架构 将自动引用和加载适当的 DLL 基于 您的应用程序的需求。

如果您的应用程序直接从 NuGet 包加载 DLL,它会 绕过所有这些逻辑并可能加载不正确的 DLL。动态链接库 在 NuGet 包下 lib/netstandard2.0/Microsoft.Data.SqlClient.dll 基本上是 任何不受支持的目标的回退 DLL 并简单地抛出 任何调用的 PlatformNotSupported 异常。这是一个更好的例外 比你在一个平台上运行时会得到的 没有为它构建的 DLL。最终,您希望使用 NuGet 包参考基础设施,否则您将不得不实施所有 这个目标框架和平台自己支持逻辑的时候 确定加载哪个 DLL。

另外,NuGet 包包含所有依赖 SqlClient 库的信息,方便下载 并引用依赖项。如果您引用并加载一个 手动创建单个 DLL,由您来确保所有依赖项 也可用于 SqlClient 库。

我建议您可以尝试改用 Microsoft.Data.SqlClient。有关从 System.Data.SqlClient 移植到 Microsoft.Data.SqlClient 的备忘单的更多详细信息,您可以参考此 article

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...