微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决调用类库我得到错误 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?