【问题标题】:Dependency specified was X but ended up with Y指定的依赖项是 X,但最终是 Y
【发布时间】:2017-02-21 07:57:47
【问题描述】:
我已将类库的 project.json 更新为目标 netstandard1.3 和 net64。
随着那个变化:
$ dotnet restore
log : Restoring packages
warn : Dependency specified was NETStandard.Library (>= 1.3.0) but ended up with
NETStandard.Library 1.6.0.
我正在发布一个库,并且确实需要定位 netstandard1.3/net46。
我如何诊断为什么要使用更高版本?
【问题讨论】:
标签:
.net
.net-core
project.json
dotnet-restore
【解决方案1】:
我在 NuGet issue 上对此进行了跟进,@emgarten 指出 NETStandard.Library 包只有 1.6.0 版本,但 1.6.0 版本包含 netstandard1.3 的程序集。
所以在这种情况下,我请求的 1.3 版本在任何地方都不存在,并且警告是通知它正在使用更高版本。
但是,诊断信息可能仍会提供更多信息。你可以vote on the issue如果它也让你绊倒并且你希望看到它更清楚。
【解决方案2】:
当您不处理 NuGet 时,就像在我的情况下您自己的项目一样,也会发生此错误。
您要做的第一件事是确保您拥有Solution Items -> global.json 中提到的正确版本。
那么你可能需要刷新每个引用这个项目的 project.json,因为 VS2015 并不总是正确刷新:
- 打开 project.json 并切断给出警告的行
- 保存文件并等待“正在恢复包...消息”消失
- 将该行粘贴回
- 再次保存文件
另一种强制刷新的方法是在解决方案或项目级别运行dotnet restore --no-cache。
【解决方案3】:
对我来说,只需删除锁定文件 (project.lock.json) 即可。删除这个文件后,Nuget自动恢复了所有的包,问题就消失了。
免责声明
虽然它对我有用,但我不确定这是否是一种适用于所有人的深刻的做事方式。所以在删除这个文件之前请注意你在做什么。
【解决方案4】:
当一个公共库项目在多个解决方案中时,我遇到了这个问题。
库项目的目录位置已更改,并且在一个解决方案中更新了 global.json 文件。
另一方面,sln 文件已针对项目的新文件位置进行了更新。但是,global.json 没有。由于项目已移动到更高的目录,旧的 global.json 文件引用的位置过于具体。