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.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 上建议这个功能,团队会认真考虑你的想法并给你一个满意的反馈。
我加载了一个旧项目。它有一个引用 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.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 上建议这个功能,团队会认真考虑你的想法并给你一个满意的反馈。