Nuget提示‘Unable to satisfy conflicting requests’但版本一致,冲突原因何在?
问题场景
在macOS系统使用6.0.403版本的dotnet cli执行dotnet restore时,针对IntegrationTests.csproj遇到NU1106错误。所有依赖对Microsoft.Extensions.Caching.Abstractions的要求均为>=6.0.0,但仍提示无法满足冲突请求。错误详情如下:
/Users/code/legacy/LEAF/IntegrationTests/IntegrationTests.csproj : error NU1106: Unable to satisfy conflicting requests for 'Microsoft.Extensions.Caching.Abstractions': Microsoft.Extensions.Caching.Abstractions (>= 6.0.0) (via project/LEAF.DistributedCache.NATS 1.2.0), Microsoft.Extensions.Caching.Abstractions (>= 6.0.0) (via project/LEAF.Components.Services.Registration.NATS 1.1.0), Microsoft.Extensions.Caching.Abstractions (>= 6.0.0) (via package/LEAF.Components.Services.Registration.Contract 1.0.0), Microsoft.Extensions.Caching.Abstractions (>= 6.0.0) (via package/Microsoft.Extensions.Caching.Memory 6.0.1) ... Framework: (.NETCoreApp,Version=v6.0)
可能的冲突原因
- 隐式版本上限约束:部分依赖包(如LEAF系列内部包)可能在自身依赖中限制了
Microsoft.Extensions.Caching.Abstractions的版本不能超过某个6.x子版本,或依赖了与该抽象包版本强绑定的组件。 - NuGet缓存损坏:本地缓存中的包版本信息不一致,导致还原时无法正确解析依赖链。
- 传递依赖版本不兼容:LEAF相关项目可能引用了其他组件的不同版本,间接导致该抽象包的版本无法统一。
- 框架匹配限制:部分依赖包对该抽象包可能有更具体的.NET 6 runtime版本要求,表面的
>=6.0.0无法覆盖实际约束。
解决步骤
- 清理本地NuGet缓存,重新执行还原:
dotnet nuget locals all --clear dotnet restore - 查看完整依赖树,定位隐藏的版本约束:
dotnet list IntegrationTests.csproj package --include-transitive - 在
IntegrationTests.csproj中显式指定该包的版本,强制统一:<ItemGroup> <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="6.0.1" /> </ItemGroup> - 检查LEAF系列内部包的依赖配置,确认是否存在硬编码的版本限制。
- 更新相关依赖包,如将
Microsoft.Extensions.Caching.Memory升级到.NET 6对应的最新子版本(如6.0.23),再尝试还原。
内容的提问来源于stack exchange,提问作者D. Reagan

