netcoreapp3.1 Azure Function以docker镜像运行时调用SqlClient抛出平台不支持异常
问题根因
该报错本质是Docker容器内的Linux运行环境缺少Microsoft.Data.SqlClient依赖的原生运行库,本地直接运行时依托Windows系统自带的对应原生依赖,因此不会触发异常。此前安装System.Data.SqlClient的操作无效,因为.NET Core 3.1场景下EF Core、Dapper默认调用的是Microsoft.Data.SqlClient的实现,旧版System.Data.SqlClient已停止跨平台场景的维护。
可行解决方案
按以下步骤操作即可修复:
- 卸载项目中所有已安装的System.Data.SqlClient Nuget包
- 统一安装
Microsoft.Data.SqlClient2.1.x版本,不要使用3.x及以上版本,3.x版本对.NET Core 3.1的Linux环境存在已知兼容问题,2.1.x是适配该场景的LTS版本 - 修改Dockerfile,在基础镜像声明后、拷贝发布文件的步骤前,添加原生依赖安装逻辑,示例代码如下:
# 基于默认Azure Function .NET Core 3.1 Debian系基础镜像的依赖安装命令 RUN apt-get update \ && apt-get install -y --no-install-recommends \ libc6-dev \ libgssapi-krb5-2 \ libssl1.1 \ libstdc++6 \ zlib1g \ && rm -rf /var/lib/apt/lists/*
如果使用Alpine系基础镜像,将上述命令替换为apk对应的依赖安装命令即可。
- (可选)如果数据库连接字符串未配置加密,可添加
Encrypt=false参数,避免Linux环境下无有效证书触发的连接报错
验证方法
清理本地Nuget缓存后重新还原项目,重新构建Docker镜像运行,调用CRUD接口即可验证修复效果。
内容的提问来源于stack exchange,提问作者MistaGoustan
相关产品推荐
相关产品推荐

