.NET 7迁移后使用DbContext触发Microsoft.Data.SqlClient平台不支持异常
问题:迁移至.NET 7后使用DbContext触发Microsoft.Data.SqlClient平台不支持错误
环境信息
- 原项目:.NET Framework 4.8类库
- 目标框架:.NET 7
- 运行环境:Windows 10 + Visual Studio 2022
- 数据库:云端SQL Server
错误信息
System.PlatformNotSupportedException: 'Microsoft.Data.SqlClient is not supported on this platform.'
当前NuGet包引用
<ItemGroup> <PackageReference Include="Microsoft.Data.SqlClient" Version="5.1.5" /> <PackageReference Include="Microsoft.Data.SqlClient.SNI.runtime" Version="5.1.1" /> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.15" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Abstractions" Version="7.0.15" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.15"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="7.0.15" /> <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.15" /> <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.6" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.15"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> <PackageReference Include="Microsoft.Extensions.Configuration" Version="8.0.0" /> <PackageReference Include="Microsoft.SqlServer.Server" Version="1.0.0" /> <PackageReference Include="PreEmptive.Protection.Checks.Attributes" Version="2.0.0" /> <PackageReference Include="System.Data.Common" Version="4.3.0" /> <PackageReference Include="System.Data.SqlClient" Version="4.8.6" /> <PackageReference Include="System.Interactive.Async" Version="6.0.1" /> <PackageReference Include="System.Memory" Version="4.5.5" /> <PackageReference Include="System.Reflection.Emit" Version="4.7.0" /> <PackageReference Include="System.Reflection.TypeExtensions" Version="4.7.0" /> <PackageReference Include="System.Runtime.Handles" Version="4.3.0" /> <PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="8.0.0" /> <PackageReference Include="Microsoft.CSharp" Version="4.7.0" /> <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.Options" Version="8.0.1" /> <PackageReference Include="Microsoft.Extensions.Primitives" Version="8.0.0" /> <PackageReference Include="Microsoft.NETCore.Platforms" Version="7.0.4" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> <PackageReference Include="System.Collections.Immutable" Version="8.0.0" /> <PackageReference Include="System.ComponentModel.Composition" Version="8.0.0" /> <PackageReference Include="System.Configuration.ConfigurationManager" Version="8.0.0" /> <PackageReference Include="System.Data.OleDb" Version="8.0.0" /> <PackageReference Include="System.Diagnostics.DiagnosticSource" Version="8.0.0" /> <PackageReference Include="System.Management" Version="8.0.0" /> <PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="6.0.0" /> <PackageReference Include="System.Security.Cryptography.Cng" Version="5.0.0" /> <PackageReference Include="System.Security.Cryptography.Pkcs" Version="8.0.0" /> <PackageReference Include="System.Security.Cryptography.Xml" Version="7.0.1" /> </ItemGroup>
DbContext代码
public partial class dbContext : DbContext { public dbContext() : base(new DbContextOptionsBuilder<dbContext>().UseSqlServer("Data Source=SERVER_IP;Initial Catalog=MY_DB_NAME;User Id=USER_NAME;Password=MY_PW;").Options) { } }
已尝试的解决方法
- 降级相关依赖包版本
- 在.csproj中指定RuntimeIdentifier并手动复制DLL
- 清理NuGet缓存
解决方案
1. 清理冲突的SqlClient包
同时引用Microsoft.Data.SqlClient和System.Data.SqlClient会导致平台适配冲突,直接移除System.Data.SqlClient包,保留Microsoft.Data.SqlClient即可。
2. 统一包版本适配.NET 7
- 将所有Microsoft.Extensions相关包从8.0.x降级到7.0.x版本(与EF Core 7.0.15版本匹配),避免跨大版本依赖冲突。
- 移除过时的
Microsoft.EntityFrameworkCore.SqlServer.Design包(1.1.6属于EF Core早期版本,EF Core 7已不需要单独的Design包)。 - 确保
Microsoft.Data.SqlClient.SNI.runtime版本与Microsoft.Data.SqlClient版本一致(当前5.1.1和5.1.5不匹配,升级SNI.runtime到5.1.5)。
调整后的核心NuGet引用示例:
<ItemGroup> <PackageReference Include="Microsoft.Data.SqlClient" Version="5.1.5" /> <PackageReference Include="Microsoft.Data.SqlClient.SNI.runtime" Version="5.1.5" /> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.15" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Abstractions" Version="7.0.15" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.15"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="7.0.15" /> <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.15" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.15"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> <PackageReference Include="Microsoft.Extensions.Configuration" Version="7.0.0" /> <!-- 其他Microsoft.Extensions包统一降级到7.0.x版本 --> </ItemGroup>
3. 验证项目配置
- 在.csproj中确认目标框架设置为
net7.0,Windows 10环境下无需额外指定RuntimeIdentifier:
<TargetFramework>net7.0</TargetFramework>
- 清理项目并重新生成,确保所有依赖包正确还原。
内容的提问来源于stack exchange,提问作者Tahirhan
相关产品推荐
相关产品推荐

