NuGet 无法从不存在的版本自动更新

NuGet fails updating automatically from non existing version

我加载了一个旧项目。它有一个引用 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,我的问题是:没有自动化的方法来完成这项工作吗?

As Nuget Package Manager already knows that there is a v2 and it fails finding anywhere v1, my question is: There is not an automated way to make this work?

其实,VSIDE并没有这种自动卸载一个不存在的nuget包的功能。您应该手动删除 nuget xml 元素。

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

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

并且它会建议我们进行恢复。

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

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

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

<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 上建议这个功能,团队会认真考虑你的想法并给你一个满意的反馈。