仅当作为 docker 映像运行时引用 System.Data.SqlClient 时出现 System.PlatformNotSupportedException

Mis*_*tan 5 c# sqlclient docker .net-core azure-functions

System.PlatformNotSupportedException in Microsoft.Data.SqlClient.dll: 'Strings.PlatformNotSupported_DataSqlClient'我正在尝试将我的 azure 函数应用程序作为 docker 映像运行,当我这样做时,每当我尝试调用我的数据层(无论我使用的是 EF Core 还是 Dapper)时,它都会抛出异常。当我将 API 项目设置为启动而不是 docker 映像时,我可以很好地运行该应用程序。

那里有非常相似的问题,但没有一个考虑到它仅在我尝试将其作为 docker 映像运行或我的目标框架是netcoreapp3.1. 我已经尝试过类似问题所说的内容。这是添加System.Data.SqlClient为 Nuget 包,无论我制作什么版本都没有帮助。

我怀疑我需要添加一些东西Dockerfile or something.

这是一些附加信息: 在此输入图像描述

编辑:我可以通过简单地创建一个azure函数、添加docker支持、创建一个在本地数据库上执行CRUD操作的简单数据层、然后运行docker映像并调用执行此操作的端点来在新项目中重新创建该问题CRUD 操作。希望有帮助。

小智 4

NuGet包包含许多支持不同 .NET 目标和不同运行时平台的 DLL Microsoft.Data.SqlClient 如果您得到的是

平台不支持异常

这最终意味着您的应用程序没有加载适当的 DLL。

适用于 .NET Framework、.NET Core、.NET Standard、Windows、Linux 等的不同 DLL。NuGet 基础结构将根据应用程序的需求自动引用并加载适当的 DLL。

如果您的应用程序直接从NuGet 包加载DLL,它会绕过所有这些逻辑并可能加载不正确的 DLL

NuGet 包中的 DLLlib/netstandard2.0/Microsoft.Data.SqlClient.dll基本上是任何不受支持的目标的后备 DLL,并且只会为任何调用引发PlatformNotSupported 异常。这是一个比在没有为其构建 DLL 的平台上运行时得到的异常更好的异常。最终,您希望使用NuGet包引用基础结构,否则在确定要加载哪个 DLL 时,您必须自己实现所有这些目标框架和平台支持逻辑。

此外,NuGet包包含库的所有依赖项信息SqlClient,并方便依赖项的下载和引用。如果您手动引用并加载单个 DLL,则需要您确保所有依赖项也可供该SqlClient库使用。

请参阅为什么当我的应用程序命中 sqlclient 方法时会出现 platformnotsupported 异常

您可以使用最新版本更新所有依赖项。它可能会解决你的问题。请检查已实现的目标框架和平台是否支持您的代码逻辑。

请参阅此处链接 1链接 2