gpt4 book ai didi

c# - System.PlatformNotSupportedException 仅在作为 docker 镜像运行时引用 System.Data.SqlClient

转载 作者:行者123 更新时间:2023-12-04 12:53:37 26 4
gpt4 key购买 nike

我正在尝试将我的 azure 函数应用程序作为 docker 镜像运行,当我这样做时,它会抛出 System.PlatformNotSupportedException in Microsoft.Data.SqlClient.dll: 'Strings.PlatformNotSupported_DataSqlClient'任何时候我尝试调用我的数据层时都会出现异常(无论我使用的是它的 EF Core 还是 Dapper)。将我的 API 项目设置为启动而不是 docker 镜像时,我可以很好地运行应用程序。
那里有非常相似的问题,但他们都没有考虑到只有当我尝试将其作为 docker 镜像运行时才会发生这种情况,或者我的目标框架是 netcoreapp3.1 的事实。 .我已经尝试过类似问题所说的。即添加 System.Data.SqlClient作为一个 Nuget 包,无论我制作什么版本都无济于事。
我怀疑我需要向 Dockerfile 添加一些东西或者其他的东西。
这是一些额外的信息:
enter image description here
编辑:
我可以通过简单地创建一个 azure 函数,添加 docker 支持,创建一个在本地数据库上执行 CRUD 操作的简单数据层,然后运行 ​​docker 镜像并调用执行 CRUD 的端点来在新项目中重新创建问题手术。希望有帮助。

最佳答案

Microsoft.Data.SqlClient NuGet 包包括许多支持不同 .NET 目标和不同运行时平台的 DLL。如果你得到一个

PlatformNotSupported Exception


这最终意味着您的应用程序没有加载适当的 DLL。
.NET Framework、.NET Core、.NET Standard、Windows、Linux 等的不同 DLL。NuGet 基础结构将根据应用程序的需要自动引用和加载适当的 DLL。
如果您的应用程序从 加载 DLL NuGet 直接打包 ,它绕过所有这些逻辑并可能加载 不正确的 DLL .
NuGet 包中的 DLL lib/netstandard2.0/Microsoft.Data.SqlClient.dll 下基本上是任何不受支持的目标的后备 DLL,并且只是为任何调用抛出 PlatformNotSupported 异常。与在没有为其构建 DLL 的平台上运行时相比,这是一个更好的异常(exception)。最终,您想使用 NuGet包引用基础结构,或者您必须在确定要加载的 DLL 时自己实现所有这些目标框架和平台支持逻辑。
此外,NuGet 包包含 SqlClient 的所有依赖信息。库并便于下载和引用依赖项。如果您手动引用和加载单个 DLL,则由您来确保所有依赖项也可用于 SqlClient。图书馆。
引用 why do i get a platformnotsupported exception when my application hits a sqlclient method
您可以使用最新版本更新所有依赖项。它可能会解决您的问题。请检查实现的目标框架和平台是否支持您的代码逻辑。
引用这里 Link 1 & Link 2

关于c# - System.PlatformNotSupportedException 仅在作为 docker 镜像运行时引用 System.Data.SqlClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69272868/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com