多目标框架项目:不升级Microsoft.EntityFrameworkCore.SqlServer时升级Microsoft.Data.SqlClient
解决方案
1. 全局强制锁定依赖版本(推荐)
在解决方案根目录创建/修改Directory.Build.props文件,全局指定Microsoft.Data.SqlClient的版本为3.7.1,强制所有项目使用该版本,忽略间接依赖的旧版本:
<Project> <PropertyGroup> <!-- 启用集中版本管理 --> <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally> </PropertyGroup> <ItemGroup> <!-- 锁定Microsoft.Data.SqlClient版本 --> <PackageVersion Include="Microsoft.Data.SqlClient" Version="3.7.1" /> </ItemGroup> </Project>
添加后执行dotnet restore,NuGet会自动用指定版本替换所有间接引用的旧版本,同时保证多目标框架(.NET 4.7.1/.NET Core 8.0)的兼容性。
2. 单个项目排除旧依赖并手动引用新版本
如果不想全局生效,可在依赖Microsoft.EntityFrameworkCore.SqlServer的项目文件中,排除它自带的Microsoft.Data.SqlClient旧版本,再直接引用3.7.1:
<!-- 保留现有EF Core SqlServer引用,但排除其对Microsoft.Data.SqlClient的依赖 --> <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="你的当前EF版本"> <ExcludePackageReferences>Microsoft.Data.SqlClient</ExcludePackageReferences> </PackageReference> <!-- 直接引用指定版本的Microsoft.Data.SqlClient --> <PackageReference Include="Microsoft.Data.SqlClient" Version="3.7.1" />
3. 清理NuGet缓存并重新还原
若project.assets.json未更新,可能是缓存残留导致,执行以下命令清理缓存后重新还原:
# 清理所有NuGet本地缓存 dotnet nuget locals all --clear # 重新还原解决方案 dotnet restore
4. 排查依赖链定位问题来源
如果以上方法仍无效,用以下命令找出哪个间接依赖还在引用1.1.3版本:
# 替换为你的项目路径 dotnet list YourProject.csproj package --include-transitive
根据输出找到依赖1.1.3的包,针对性调整该包的引用或排除其对Microsoft.Data.SqlClient的依赖。
内容的提问来源于stack exchange,提问作者user3497702
相关产品推荐
相关产品推荐

