.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
相关产品推荐
相关产品推荐

