【发布时间】:2014-02-24 08:53:19
【问题描述】:
我打包为 NuGet 包的库使用 await/async,因此我需要向 Microsoft.Bcl.Async 添加依赖项。但是 Microsoft.Bcl.Async 依赖于 Microsoft.Bcl 和 Microsoft.Bcl.Build。根据安装顺序,我从 NuGet.org 获得这些包的不同版本的测试项目中会发生什么。
如果我安装 Microsoft.Bcl.Async,则 NuGet 会安装以下包:
package id="Microsoft.Bcl.Build" version="1.0.4"
package id="Microsoft.Bcl" version="1.0.19"
package id="Microsoft.Bcl.Async" version="1.0.165"
然后我的测试项目没有编译。
如果我首先安装 Microsoft.Bcl,NuGet 会安装以下内容:
package id="Microsoft.Bcl.Build" version="1.0.10"
package id="Microsoft.Bcl" version="1.1.6"
然后我可以安装 Microsoft.Bcl.Async:
package id="Microsoft.Bcl.Async" version="1.0.165"
测试项目没有编译。
但如果我一个一个手动安装所有三个 BCL 项目,我会得到以下结果:
package id="Microsoft.Bcl.Build" version="1.0.13"
package id="Microsoft.Bcl" version="1.1.6"
package id="Microsoft.Bcl.Async" version="1.0.165"
只有这样我的测试项目才能编译成功!
我一定误解了 NuGet 版本解析的工作原理,但 NuGet 不应该将包解析为兼容性范围内的最新版本吗?上面的场景显示,NuGet 获取支持数量最小的依赖版本:Microsoft.Bcl.Async 1.0.165 需要 Microsoft.Bcl 1.0.19 或更高版本,NuGet 需要 1.0.19。 Microsoft.Bcl 1.0.19 需要 Microsoft.Bcl.Build 1.0.4 或更高版本,NuGet 需要 1.0.4。最后它是最旧的兼容包的组合(显然它不能正常工作)。
如果这是默认行为,是否可以覆盖它?
【问题讨论】:
标签: .net dependencies nuget versioning nuget-package