0

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

基于 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 测试“服务”时,没有错误,它工作正常

谢谢

4

1 回答 1

0

根据文件

Microsoft.Data.SqlClient NuGet 包包括许多支持不同 .NET 目标和不同运行时平台的 DLL。如果您认为不应出现 PlatformNotSupported 异常,则最终意味着您的应用程序未加载适当的 DLL。这可能有很多原因。围绕引用和加载引用的 NuGet 包的 NuGet 包结构和基础结构包括允许包包含多个 DLL 的逻辑,这些 DLL 实现对不同 .NET 和平台目标的支持。这意味着 .NET Framework、.NET Core、.NET Standard、Windows、Linux 等的不同 DLL。NuGet 基础结构将根据应用程序的需要自动引用和加载适当的 DLL。

如果您的应用程序直接从 NuGet 包加载 DLL,它会绕过所有这些逻辑并可能加载不正确的 DLL。在 lib/netstandard2.0/Microsoft.Data.SqlClient.dll 下的 NuGet 包中的 DLL 基本上是任何不受支持的目标的后备 DLL,并且只是为任何调用引发 PlatformNotSupported 异常。这是一个比在没有为其构建 DLL 的平台上运行时获得的更好的异常。最终,您希望使用 NuGet 包参考基础结构,或者在确定要加载哪个 DLL 时,您必须自己实现所有这些目标框架和平台支持逻辑。

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

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

于 2021-07-20T02:20:07.210 回答