【问题标题】:NuGet fails updating automatically from non existing versionNuGet 无法从非现有版本自动更新
【发布时间】:2020-09-05 07:21:45
【问题描述】:

我加载了一个旧项目。它有一个引用了 nuget.org 远程存储库中不再存在的版本(版本 1)的 NuGet 包。它在我的本地计算机中也不存在。在远程存储库中存在版本 2。

当我打开Nuget Package Manager 时,这个包出现在要更新的列表中(从版本 1 到版本 2)。我这样做了,但它失败了,因为它试图找到以前的版本,所以:

Unable to find version 1.00 of package MyPackage

如果我尝试卸载它,甚至检查选项:

 - Remove dependencies
 - Force uninstall

错误是一样的……

只有当我手动修改 packages.json 版本时它才有效。

由于 Nuget 包管理器已经知道有 v2 并且它无法找到 v1 的任何位置,我的问题是:没有自动化的方法来完成这项工作吗?

【问题讨论】:

  • 既然VS会在你对nuget包做一些改动时自动执行默认的恢复操作?目前还没有跳过恢复卸载包的功能,需要手动删除xxx.proj文件中不存在的包。否则,您应该向 VS 团队建议我提供的功能。
  • 如果我的回答能帮助你处理和理解这个问题,你可以考虑接受。如果没有,请随时告诉我们。你这样做真是太好了。所有这些都将帮助我们创造一个良好的社区环境。
  • @PerryQian-MSFT 抱歉回复晚了,我之前没有机会评论这个。谢谢!

标签: visual-studio nuget visual-studio-2019 nuget-package nuget-package-restore


【解决方案1】:

由于 Nuget 包管理器已经知道有 v2 并且它失败了 在任何地方找到 v1,我的问题是:没有一种自动化的方法可以 完成这项工作?

其实,VS IDE没有自动卸载不存在的nuget包的功能。您应该手动删除 nuget xml 元素。

并且当你卸载或更新一个包时,VS IDE会检查当前机器上或nuget包源中是否存在当前版本的nuget。也就是说,VS IDE 会在你卸载或更新 nuget 包时进行额外的还原操作。这是默认操作。

举个例子,当我卸载本地缓存包源下不存在的包时,会出现错误:

它会建议我们进行恢复。

---------------

如果你想更新或卸载一个不存在的包,你必须手动删除包的内容,你别无选择:

1)删除packages.config文件中的包内容(如果你使用packages.config nuget管理格式)如下:

<package id="Microsoft.Data.OData" version="5.8.4" targetFramework="net462" />

2)删除xxx.csproj文件中的这些节点:

 <Reference Include="Microsoft.Data.OData, Version=5.8.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Data.OData.5.8.4\lib\net40\Microsoft.Data.OData.dll</HintPath>
    </Reference>

3) 然后安装新版本的包。

然而,我认为 VS 应该认真对待这个问题,我对你的意见很感兴趣。在您当前的情况下,这似乎是一个错误,并且还原操作是多余的。因此,在卸载软件包时,您不必检查该软件包是否存在。只需卸载或安装您想要的。

所以我建议你可以在我们的User Voice Forum 上推荐这个功能,团队会认真考虑你的想法并给你一个满意的反馈。

【讨论】:

    猜你喜欢
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 2012-10-15
    相关资源
    最近更新 更多