Visual Studio 2013 NuGet包管理不起作用

41

我过去几周遇到了奇怪的问题。 我使用带有Update 1的Visual Studio 2013 Premium Ed运行Windows 8。 Visual Studio中的NuGet包管理器根本无法工作。 我已经卸载/重新安装过它。 我已经更新了本地的NuGet.exe(以前是2.5,现在是2.8.5) - 确保将其包含为路径变量。 甚至从控制台中,我也无法安装或更新任何软件包。 确认控制台正在运行2.8.50313.46。

从管理器中,它只是重复显示“检索信息”的进度条循环。 更新或在线都没有显示。 从已安装的软件包中,我可以看到我的解决方案中的所有内容都没有问题。

enter image description here

像这个帖子建议的那样,以管理员身份运行并不起作用,因为我使用的是VS 2013 Express。 另一个帖子发现这是一个nuget.org问题,但在我的情况下,我的同事可以从包管理器中访问nuget.org(同一网络)而且没有问题。 编辑:在打开它之前,我还从我的解决方案中删除了suo文件。

有什么解决方法吗?


1
检查VS2013日志将是解决问题的步骤之一,另一个步骤是检查扩展和更新窗口,以查看是否需要更新NuGet。 - csharpwinphonexaml
1
我看到你还有其他几个Nuget软件包源。我注意到软件包管理器会等待所有软件包源的数据可用后才变为可用状态。是否可能其中一个其他源需要很长时间才能加载? - Steven V
好的,我会尝试两种方法并报告结果。 - osij2is
1
http://nuget.codeplex.com/workitem/3819 - David Brabant
我在使用Visual Studio Express 2012 for Web时遇到了同样的问题。对我来说,这是一个软件包源的问题,我勾选了nuget.org路径的复选框,然后它就可以工作了。 - Sharifullah Sharif
显示剩余3条评论
14个回答

44

看起来 nuget.org 移除了对默认 TLS 版本(1.1)的支持。

在 NuGet 命令控制台(PM)中运行以下命令以使用版本 1.2:

[Net.ServicePointManager]::SecurityProtocol=[Net.ServicePointManager]::SecurityProtocol-bOR [Net.SecurityProtocolType]::Tls12

不过,这似乎是一个非永久性的解决方案,所以在重新启动Visual Studio之后,您需要再次运行该命令。太糟糕了。

如果/当您找到永久性解决方案时,请通知我们!


是的,这是唯一对我有用的解决方案。进一步的研究后,很明显主要原因是使用的 TLS 版本——2020 年所有主要浏览器已经弃用了 TLS 1.0 和 TLS 1.1,而 nuget.org 服务器正在将所有 http 访问重定向到 https,并且要求使用 TLS 1.2 协议(应该这样)。因此,解决方案是确保注册表中启用了 TLS 1.2,并可能禁用 TLS 1.0 和 TLS 1.1 协议。请检查 microsoft.com 的支持页面以获取有关启用 TLS 1.2 的注册表设置的信息——需要添加/更改相当多的值... - Påhl Melin
1
一个关于在Windows注册表中启用TLS 1.2协议的资源:https://support.microsoft.com/zh-cn/help/3140245/update-to-enable-tls-1-1-and-tls-1-2-as-default-secure-protocols-in-wi - Påhl Melin
@PåhlMelin,谢谢Påhl! - JERKER

38

我遇到了同样的问题。卸载NuGet,重启VS2013,然后重新安装NuGet对我很有效。

您可以在VS中通过转到“工具”->“扩展和更新”来执行此操作。


1
我知道这不是解决问题的“办法”,但卸载和重新安装NuGet只需要几秒钟的时间。现在,对于我来说,VS NuGet管理器再次完美无缺地工作了。感谢Christopher。 - Simon Mattes
1
这可能不是所有人的解决方案,但它是我的!Nuget在加载时自动检查我的解决方案中的每个项目,并添加<RestorePackage>true</RestorePackage>。谢谢! - Justin
6
这对我也行,如果有人不知道如何卸载NuGet,请前往“工具”->“扩展和更新”,你会在那里找到它。 - uowzd01
如何重新安装NuGet?有什么建议吗? - Leebeedev
1
这对我没有用。 https://dev59.com/JWAg5IYBdhLWcg3wlb1h#63574949 有用。 - Antonín Procházka

7
我尝试了其他建议,但在我那里并没有奏效(例如重新安装软件包管理器)。奇怪的是,只需删除(取消选中)Nuget Package Manager的所有软件包源(工具 -> 选项 -> Nuget Package Manager -> Package Sources),然后单击“确定”,再重新添加它们即可解决问题。
对于我来说,当我添加新的nuget软件包管理器时,我添加了以下内容: https://www.nuget.org/api/v2/

3

我遇到了同样的问题。打开“程序包管理器控制台”(视图->其他窗口->程序包管理器控制台)对我有用。


补充一下,这对我也起作用了,没有其他更改。只需打开“程序包管理器控制台”,然后打开“管理NuGet程序包”窗口>在线开始显示所有程序包并允许搜索。这是在VS 2013更新5上的操作。 - FreeMars

2
我曾经遇到同样的问题,与我公司防火墙背后的代理设置有关。
您可以找到文件C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ devenv.exe.config
Visual Studio更新4似乎删除了它们,不确定为什么。 更多详细信息请见此处:Visual Studio 2013更新4-工具和扩展无法访问互联网

我希望早点看到这个。如果这样做可以的话,我不会感到惊讶。不幸的是,我已经重新构建了我的笔记本电脑,所以这不再是一个问题,但代理问题可能解释了我遇到的问题。 :) +1 - osij2is

2

如NuGet.org上的“弃用TLS 1.0和1.1”页面所述。

https://devblogs.microsoft.com/nuget/deprecating-tls-1-0-and-1-1-on-nuget-org/

我已经向注册表中添加了以下2个条目,nuget包管理器又可以正常工作了:

reg add HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f /reg:64
reg add HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f /reg:32

1
请查看NuGet代理后面
简单来说,您应该放置。
<configuration>
    <config>
        <add key="http_proxy" value="http://my.proxy.address:port" />
        <add key="http_proxy.user" value="mydomain\myUserName" />
        <add key="http_proxy.password" value="base64encodedHopefullyEncryptedPassword" />
    </config>
</configuration>

NuGet.config 添加到路径 c:\Users\<your name>\AppData\Roaming\NuGet\ 下(或当前的 .nuget 目录,参见 http://skolima.blogspot.ru/2012/07/nuget-proxy-settings.html)。

可以通过运行以下命令来完成此操作:

nuget.exe config -set http_proxy=http://my.proxy.address:port
nuget.exe config -set http_proxy.user=mydomain\myUserName
nuget.exe config -set http_proxy.password=mySuperSecretPassword

对抗 c:\Users\<你的用户名>\AppData\Roaming\NuGet\NuGet.exe

实际上,只有密码应该通过命令设置,其他参数可以直接放入文件中。此外,您也可以省略密码,然后在需要时nuget会要求您输入。


1

工具 --> nuGet 包管理器 --> 包管理器控制台

然后复制以下指令 [Net.ServicePointManager]::SecurityProtocol=[Net.ServicePointManager]::SecurityProtocol-bOR [Net.SecurityProtocolType]::Tls12

按下回车键。

再次尝试,它就可以正常工作了。


它有效!你能解释一下这个命令是干嘛用的吗?提前谢谢。 - Oscar Otero

1

我有同样的经历,我的问题是由于我在运行http调试器(fiddler)。我关闭了fiddler并重新启动Visual Studio,问题得到解决。


0

首先,在包管理器控制台中运行此命令。

[Net.ServicePointManager]::SecurityProtocol=[Net.ServicePointManager]::SecurityProtocol-bOR [Net.SecurityProtocolType]::Tls12

现在试试这个版本:

NuGet\Install-Package AjaxControlToolkit -Version 20.1.0

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