You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 17:05:57