【发布时间】:2014-03-11 01:13:02
【问题描述】:
我们正在为许多包裹使用内部供稿。今天我们注意到包还原不再起作用。每个包都失败,并出现如下错误:
找不到包“...”的版本“...”。
有问题的项目在 2013 年 10 月 4 日首次提交,当时 NuGet 的版本为 2.7
多人成功克隆了根本没有二进制文件的源代码控制存储库,没有人记得软件包还原有任何问题。所以要么我们所有人都疯了,要么这很好。
当我今天尝试做一个新的克隆并更新到第一个提交时,我得到了上面的错误。与最近的提交相同。这是 NuGet 2.8
These are the docs concerning Package Restore changes in 2.7:
然而,在采取上述任何步骤之前,NuGet 会验证 同意分为两个层面:
- Visual Studio 配置为“允许 NuGet 下载丢失的包”
- Visual Studio 配置为“在 Visual Studio 中构建期间自动检查丢失的包”
这两项都在 VS 选项中勾选。
这种包还原方法有几个优点:
- 无需为您的项目或解决方案启用它。 Visual Studio 将在您的项目完成之前自动下载缺失的包 构建和团队成员不需要了解 NuGet 包还原。
然而,这正是我们今天设法解决问题的方法:右键单击解决方案并启用包还原。这导致了多个层面的变化。
.csproj 级别
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
+ <RestorePackages>true</RestorePackages>
.sln 级别
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{6FE1C500-523A-4E05-B72E-28F14DEDB055}"
+ ProjectSection(SolutionItems) = preProject
+ .nuget\NuGet.Config = .nuget\NuGet.Config
+ .nuget\NuGet.exe = .nuget\NuGet.exe
+ .nuget\NuGet.targets = .nuget\NuGet.targets
+ EndProjectSection
+EndProject
最后,.nuget\NuGet.Config、.nuget\nuget.exe 和 .nuget\NuGet.targets 的创建。
作为测试,我还创建了一个新的解决方案和项目。现在我
- 添加一个内部包
- 构建
- 关闭解决方案
- 删除
packages、bin和obj目录(就像我们的忽略文件一样) - 打开解决方案
- 重新编译,得到问题开头提到的错误
当我使用官方 repo 中的包重复这些步骤时,一切正常。完全没有错误。
【问题讨论】:
-
你说它在官方回购中没有错误;也许你的内部回购已经死了?或者可能需要对其进行更新以支持最新的 NuGet(也许提要规范已更改?)。
标签: visual-studio visual-studio-2012 nuget