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

.NET 8.0 C# Web API发布至IIS时遇Microsoft.Data.SqlClient平台不支持错误

问题描述

我正在开发一个基于.NET 8的C# Web API项目,项目的csproj配置如下:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

  <ItemGroup>
    <Compile Remove="Controllers\ProductController.cs" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.10" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.10" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.10">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.1" />
    <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.9.0" />
  </ItemGroup>

</Project>

该API在开发环境运行正常,但部署到IIS后出现错误:

"error": "Microsoft.Data.SqlClient is not supported on this platform."

已尝试的解决步骤:

  • 确认服务器已安装.NET 8 Hosting Bundle
  • 检查平台兼容性并调整应用程序池设置
  • 验证Microsoft.Data.SqlClient及其他NuGet包版本
  • 将IIS应用程序池配置为使用“No Managed Code”
  • 尝试自包含部署

以上步骤均未解决问题,求进一步的解决思路。

解决思路与建议

1. 强制指定发布架构

在csproj的<PropertyGroup>中添加RuntimeIdentifier,明确匹配服务器的架构(多数服务器为x64),避免发布生成不兼容的架构文件:

<PropertyGroup>
  <TargetFramework>net8.0</TargetFramework>
  <Nullable>enable</Nullable>
  <ImplicitUsings>enable</ImplicitUsings>
  <RuntimeIdentifier>win-x64</RuntimeIdentifier>
</PropertyGroup>

发布时选择对应架构,确保部署包与服务器环境完全匹配。

2. 显式添加Microsoft.Data.SqlClient引用

Microsoft.EntityFrameworkCore.SqlServer会间接依赖Microsoft.Data.SqlClient,但可能存在版本兼容或平台运行时缺失问题。直接显式添加兼容.NET 8的版本:

<PackageReference Include="Microsoft.Data.SqlClient" Version="5.1.5" />

添加后重新发布,确保该包的所有依赖项被正确打包。

3. 校准IIS应用程序池配置

  • 确认应用程序池的**.NET CLR版本**设置为无托管代码
  • 服务器为64位时,将应用程序池高级设置中的启用32位应用程序设为False
  • 检查应用程序池标识是否具备SQL Server访问权限,同时确认服务器防火墙开放SQL连接端口

4. 检查发布文件完整性与日志

  • 若使用框架依赖模式,重新安装.NET 8 Hosting Bundle并重启IIS,确保运行时环境完整
  • 查看发布后的bin目录,确认Microsoft.Data.SqlClient.dll及Microsoft.Data.SqlClient.SNI.dll等相关文件存在
  • 打开Windows事件查看器的应用程序日志,获取完整错误堆栈,定位异常触发的具体环节

5. 禁用ReadyToRun预编译

在csproj中添加属性关闭预编译,避免平台兼容性问题:

<PropertyGroup>
  <!-- 其他属性 -->
  <PublishReadyToRun>False</PublishReadyToRun>
</PropertyGroup>

重新发布后部署测试。

内容的提问来源于stack exchange,提问作者Nemo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 17:54:51