如何安装特定版本的NuGet?

6

我正在解决与特定版本的nuget和msbuild相关的问题,因此需要降级nuget版本:

Mono 5.14.0.177、msbuild 15.0、nuget 4.7.1在Travis CI上构建失败,但在VirtualBox中无法复现

使用以下命令可以升级Nuget到最新版本:

nuget update -self

然而安装特定版本的nuget似乎不受支持,这仍会安装最新版本的nuget:

nuget update -self -Version 4.6.2

而这个命令则会失败并提示找不到nuget错误:

nuget install nuget -Version 4.6.2

https://learn.microsoft.com/en-us/nuget/tools/cli-ref-install

https://learn.microsoft.com/en-us/nuget/tools/cli-ref-update


编辑:

查看nuget源代码后发现开发人员做出了一个假设,即更新应始终发生在最新版本上:

https://github.com/NuGet/NuGet.Client/blob/3803820961f4d61c06d07b179dab1d0439ec0d91/src/NuGet.Clients/NuGet.CommandLine/Common/SelfUpdater.cs#L85

// Check to see if an update is needed
if (package == null || version >= package.Version)

非常遗憾的决定,微软!因此提交了一个PR但被拒绝了:

https://github.com/NuGet/NuGet.Client/pull/2422


1
在我看来,“更新”意味着安装比您自己的版本更高且其代码正确的版本。 - Access Denied
@AccessDenied 只有更新标志允许自我更新 NuGet,但安装标志不支持此操作。安装通常意味着从“零开始”安装,因此需要进行区分。 - denfromufa
1
就像你所发现的那样,命令 nuget update -self 会将 nuget.exe 更新到最新版本。如果你想将其更新到特定版本,不妨手动从 nuget.org 下载 nuget.exe:https://dist.nuget.org/win-x86-commandline/v4.6.2/nuget.exe,然后用下载的文件替换旧版本即可。 - Leo Liu
1
@LeoLiu-MSFT,没有明显的理由说明为什么NuGet不能自己降级。正如您从我的PR中所看到的,这只是NuGet代码中的一项小更改。 - denfromufa
@denfromufa,是的,我认为你的PR很合理,但我不认为它有很高的优先级。您是否有必须使用command来升级Nuget到指定版本的原因?如果没有,您可以暂时考虑使用我的先前建议。MS将考虑您的PR。 - Leo Liu
将NuGet版本降级为CMD上已安装的版本应该如何操作? - denfromufa
1个回答

1
如何安装特定版本的NuGet?
根据文档 NuGet CLI reference
每个下载都是nuget.exe文件。请指示您的浏览器将文件保存到您选择的文件夹中。该文件不是安装程序;如果直接从浏览器运行它,您将看不到任何内容。
我们可以知道,NuGet.exe不是安装程序。您只需从nuget.org下载所需版本,然后替换本地磁盘上的文件即可。
尽管NuGet团队提供了命令行nuget update -self,可以用于更新nuget.exe到最新版本,就像您所说的那样,但是nuget update命令不支持更新指定版本的nuget.exe。因此,我认为您的PR是合理的,但应该优先级较低。因为我们可以通过手动下载来更新nuget.exe
希望这个清晰并有所帮助。

如果您认为这是一个有用的PR,请在上面留下支持性评论,好吗?该PR被拒绝了,但没有给出详细的解释。 - mason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接