将NuGet软件包还原到最新版本

将NuGet软件包还原到最新版本,nuget,nuget-package,nuget-package-restore,Nuget,Nuget Package,Nuget Package Restore,在这个项目中,我一直在使用一些定制的NuGet源代码。显然,其中一些软件包已不再可用,但我在另一台(仍在工作)服务器上有更新(且仅更新)版本的软件包。有没有一种方法可以直接将包恢复到最新版本,而不必手动替换.csproj和packages.config文件中的所有引用 我已尝试运行Updade包-重新安装,但只收到以下错误消息: 解决方案中缺少某些NuGet软件包。为了构建依赖关系图,需要恢复包。在执行任何操作之前还原软件包。如果您使用(并且仍然希望使用)的某些软件包不再可用,我建议您对其进行备

在这个项目中,我一直在使用一些定制的NuGet源代码。显然,其中一些软件包已不再可用,但我在另一台(仍在工作)服务器上有更新(且仅更新)版本的软件包。有没有一种方法可以直接将包恢复到最新版本,而不必手动替换.csproj和packages.config文件中的所有引用

我已尝试运行
Updade包-重新安装
,但只收到以下错误消息:

解决方案中缺少某些NuGet软件包。为了构建依赖关系图,需要恢复包。在执行任何操作之前还原软件包。

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

在服务器上查找。在Windows上,它位于

%用户配置文件%.nuget\packages

找出要备份的包(和版本),并将
.nupkg
文件复制到相应的文件夹中

那么你有两个选择:

  • 在您的开发机器上
  • 第一个选项的优点是可以在任何您想要的机器(开发机器、构建服务器等)上使用单个源,但您将有更多的设置,尤其是身份验证/授权(因为它是一个私有提要)

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

    工具->Nuget软件包管理器->软件包管理器设置->软件包源

    单击绿色的
    +
    按钮添加一个新的源代码,只需将其命名为
    Local
    ,然后浏览到您的
    C:/Nuget
    ,即可设置源代码

    从现在起,当您要还原Nuget软件包时,Visual Studio将首先查看
    Nuget.org
    源,如果找不到引用的软件包,则会查看本地源,并将安装的软件包缓存到计算机的
    %userprofile%.Nuget\packages

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

    更新:

    我想我现在更明白你的问题了

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

    因此,如果一个
    numget还原
    不起作用,那么
    更新包-重新安装
    显然也会失败

    有了Nuget,当某些东西不起作用时,你不应该坚持,而是要找到能让它再次起作用的方法。我无法计算我去不同缓存删除一些缓存包的次数


    我认为您应该尝试使用
    nuget restore
    并查看哪些软件包导致问题,然后卸载这些软件包(如果项目中尚未安装这些软件包,这将删除
    .csproj
    packages.config
    中的引用),最后,您可以安装这些软件包的最新版本。

    它实际上以选项2结束。我不得不要求其他员工复制他们
    /packages
    文件夹中的所有包,然后我可以使用本地nuget提要重新创建状态。它仍然要求我使用那些我不应该访问的包。问题仍然存在:有没有办法在不下载当前指定版本的软件包的情况下升级这些软件包?@Doro我在一条简单的评论中没有足够的字符,所以我编辑了我的答案。@Doro仅供参考,昨天我克隆了我们的一个项目,它引用了一个Nuget包,我实际上在很久以前重命名了它,并从Nuget提要中删除了旧包。但是当我尝试
    软件包卸载时,Nuget CLI给了我一个还原错误。唯一的方法是从
    .csproj
    packages.json
    文件中删除引用。这是Nuget IMO的一个有点愚蠢的行为,CLI可以只删除引用,而不是返回错误,但这可能是有原因的……这就是我问这个问题的原因:)如果不恢复packages.json或.csproj中指定的版本,就无法删除/更新包。这有点奇怪。幸运的是,我的大学在本地有这些旧软件包,所以我所要做的就是将它们的文件复制到我的计算机上,并附加到本地的nuget存储库。工作起来很有魅力,但仍然——这不是我对如此庞大而古老的软件包经理的期望。@Doro我完全同意你的看法