.NET 3升级至.NET 6后Linux环境下System.Data.SqlClient平台不支持问题
解决.NET 6 Linux环境下System.Data.SqlClient PlatformNotSupportedException问题
问题描述
将后台应用从.NET 3升级到.NET 6后,在TeamCity的Linux代理运行单元测试时抛出错误:
System.PlatformNotSupportedException : System.Data.SqlClient is not supported on this platform.
解决方案
1. 安装Microsoft.Data.SqlClient NuGet包
.NET 6中System.Data.SqlClient已被弃用,且在Linux(尤其是Alpine)环境下需要显式引入Microsoft.Data.SqlClient包。修改unittest.csproj,添加如下引用:
<ItemGroup> <PackageReference Include="Microsoft.Data.SqlClient" Version="5.1.1" /> </ItemGroup>
注:版本可选择与.NET 6兼容的最新稳定版(如5.x系列)。
2. 补充Alpine镜像的系统依赖
你的Docker镜像使用了Alpine(musl libc),Microsoft.Data.SqlClient需要额外的系统库支持。在test-unit.Dockerfile或主Dockerfile中添加系统包安装命令:
RUN apk add --no-cache icu-libs krb5-libs libgcc libintl libssl1.1 libstdc++ zlib
这些依赖是SqlClient在Alpine环境运行的必要条件,缺少会触发平台不支持错误。
3. 统一测试项目的RuntimeIdentifier
确保测试项目与主项目的运行时标识一致,在unittest.csproj中添加:
<PropertyGroup> <TargetFramework>net6.0</TargetFramework> <IsPackable>false</IsPackable> <RuntimeIdentifiers>linux-musl-x64</RuntimeIdentifiers> </PropertyGroup>
避免因编译时平台不匹配导致的依赖问题。
4. 修正测试代码的命名空间
确保测试代码中使用的是Microsoft.Data.SqlClient命名空间,而非旧的System.Data.SqlClient:
using Microsoft.Data.SqlClient; [Test] // 根据你使用的测试框架调整特性(如xUnit的[Fact]、NUnit的[Test]) public void SqlConnectionTest() { var connectionString = "your_connection_string"; using (var connection = new SqlConnection(connectionString)) { connection.Open(); // 你的测试逻辑 } }
内容的提问来源于stack exchange,提问作者ravvi
相关产品推荐
相关产品推荐

