将 NuGet 包恢复到最新版本

Restoring NuGet packages to the latest version

在项目中,我一直在使用一些自定义 NuGet 源。显然其中一些不再可用,但我在另一台(仍在工作的)服务器上确实有更新的(而且只有更新的)版本的软件包。有没有办法直接将包恢复到最新版本,而无需手动替换 .csproj 和 packages.config 文件中的所有引用?

我试过 运行 Updade-Package -Reinstall 但我只收到以下错误消息:

Some NuGet packages are missing from the solution. The packages need to be restored in order to build the dependency graph. Restore the packages before performing any operations.

如果您使用(并且仍想使用)的某些软件包不再可用,我建议您对其进行备份。

在您的服务器上找到 Nuget cache。在 Windows 上,它位于

%userprofile%.nuget\packages

找到您要备份的包(和版本)并将 .nupkg 文件复制到它们各自的文件夹中。

那么你有两个选择:

  1. Create a private Nuget feed
  2. Create a local Nuget feed 在你的开发机器上

第一个选项的优点是可以在您想要的任何机器(开发机器、构建服务器...等)上使用单一来源,但您需要进行更多设置,尤其是 authentication/authorization(因为它是私人供稿)

对于第二个选项:只需创建一个 C:/Nuget 文件夹并放入您想要的任何 .nupkg。 然后在 Visual Studio 中转到:

Tools -> Nuget Package Manager -> Package Manager Settings -> Package Sources

单击绿色 + 按钮添加新来源,只需为其命名 Local 并浏览到您的 C:/Nuget 以设置来源。

从现在开始,当你想要恢复你的 Nuget 包时,Visual Studio 将首先查看 nuget.org 提要,如果它没有找到引用的包,然后将查看你的本地将已安装的软件包提供并缓存到您机器的 %userprofile%.nuget\packages

我希望能回答你的问题,我不太确定你问的是什么以及你对 Nuget 的了解。

更新:

我想我现在更理解你的问题了。

首先,我认为你误解了Update-Package -Reinstall命令。它将使用已引用的相同版本重新安装软件包,但只是重新安装它们。例如,当您更改项目的目标框架时,这是一个有用的命令。然后您可以重新安装相同版本的包,它们将重新定位此 .NET Framework 版本。

因此,如果 nuget restore 不工作,那么 Update-Package -Reinstall 显然也会失败。

使用 Nuget,当某些东西不起作用时,您不应该坚持,而是找到可以让它再次起作用的调整。我已经数不清有多少次去不同的缓存删除一些缓存的包了。

我认为您应该尝试使用 nuget restore 并查看导致问题的软件包,然后卸载这些软件包(这只会删除 .csprojpackages.config 中的引用,如果它们还没有安装在项目中),那么你终于可以安装这些包的最新版本了。