【问题标题】:NuGet fails: "The underlying connection was closed: An unexpected error occurred on a send"NuGet 失败:“基础连接已关闭:发送时发生意外错误”
【发布时间】:2020-10-08 16:30:08
【问题描述】:

我想通过使用 Manage Nuget Packages 安装 Microsoft ASP.NET Identity Core,但是当我单击安装按钮时出现以下错误:

底层连接已关闭:发送时发生意外错误

【问题讨论】:

  • 你能用 NuGet 安装其他包吗?
  • 不,我无法安装任何软件包。

标签: nuget


【解决方案1】:

尝试将以下内容粘贴到 .reg 文件中并运行它。然后尝试运行您的 NuGet 命令(无需重新启动)。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

遇到此问题是因为未启用 TLS1.2(类似于 Tony 的回复)。使用 http 确实不会解决这种情况,因为现在强制执行 TLS1.2,NuGet 重定向到 https。

【讨论】:

  • 谢谢!这修复了在 LINQPad 4 中使用 NuGet 时出现的异常。
  • Nuget 现在已从 2020 年 6 月 15 日起正式永久删除对 TLS 1.0 和 1.1 的支持。请参阅:devblogs.microsoft.com/nuget/…。因此,您可能会在较旧的 Windows 平台(对我来说是 Windows 2012 R2)上遇到此问题。
  • 为我工作我正在使用 Visual Studio 2013
  • @ZeeshanAhmadKhalil 这是一个文本文件。您可以在您拥有权限的文件系统上的任何位置创建它。只需将我的解决方案粘贴到您的文本文件中,然后使用“.reg”扩展名保存您的文本文件。双击它,Windows 会自动将它添加到注册表中(如果您有权限)。
  • 工作。 VS2013需要重启。
【解决方案2】:

这是http://go.microsoft.com 上的 SSL 证书问题。将包源网址更改为http://packages.nuget.org/v1/FeedService.svc/,这对我有用。

来源:https://github.com/nuget/home

【讨论】:

    【解决方案3】:

    我在使用 Microsoft Visual Studio Premium 2012 的旧客户开发人员 VM 上遇到此错误:

    Install-Package : 加载软件包时出错 'https://nuget.org/api/v2/':底层连接已关闭:一个 发送时发生意外错误

    通过转到工具 -> 扩展和更新... -> 更新 -> Visual Studio 库并从那里更新 NuGet 包管理器来解决它。

    重启后一切正常:

    【讨论】:

    • 这是为我解决问题的答案。更新工具总是胜过手动修改注册表。
    • “无法检查更新,因为尝试联系服务器时出错”
    • 我首先在新更新的 Win11 笔记本电脑上尝试了这个。它对我不起作用(尝试更新 NuGet 包管理器时出错)。所以我从另一个帖子中添加了SchUseStrongCrypto 注册表项,但它也不起作用。重新启动后,我尝试再次更新 NuGet 包管理器,这次它工作了。作为OP,我不再遇到问题。很难说实际修复了什么,也许在我的情况下两者都需要。
    【解决方案4】:

    自 2020 年 6 月 15 日起,NuGet 已移除对 TLS 1.0 和 1.1 的支持。 见https://devblogs.microsoft.com/nuget/deprecating-tls-1-0-and-1-1-on-nuget-org/

    如果您使用的是 VS2013 或更低版本,那么截至此日期,您已经失去了 NuGet 连接,并且您只能通过至少升级到 VS2015 才能使用 NuGet,尽管我建议最迟在发表此评论时升级到 VS2019

    【讨论】:

    • 截至 2020 年 7 月 7 日,事实并非如此。我们的团队仍在使用 VS 2013,我们能够通过遵循第一个提到向注册表添加条目的答案来克服错误。
    • 在我的情况下,添加到注册表并没有解决问题。很高兴它为你做了。但是,我将 VS 2013 项目升级到 VS 2019。我必须安装一些我在 VS 2013 中拥有的扩展,除此之外它运行良好。我确实首先为 VS 升级创建了一个新的 git 分支,以便有选择地回滚。我注意到除了我自己放入的代码更改之外,没有任何 git 更改。对 VS 2019 非常满意。
    • 是的,VS2013 也有同样的问题。通过根据投票最多的答案添加注册表项并重新启动 VS 来解决。
    • 通过添加注册表项为 VS2012(是的古老公司许可证)修复了它。虽然我也将它添加到了 .Net 3.0 和 3.5 中,但为了更好的衡量标准。不知道这是否真的有什么作用,但是嗯,它奏效了。
    【解决方案5】:

    如果您没有启用 TSL 1.0(在 Server 2012R2 中默认禁用),也会发生这种情况。在这种情况下,您可能会在点击“底层连接已关闭:发送时发生意外错误”错误之前看到一些软件包安装成功。

    有关错误的更多详细信息,请使用“详细信息”从命令行运行 nuget install

    System.Net.WebException:底层连接已关闭:意外错误 或发生在接收。 ---> System.ComponentModel.Win32Exception:客户端 和服务器无法通信,因为它们没有共同的算法

    【讨论】:

      【解决方案6】:

      如果您的防火墙正在执行 SSL 检查,则可能会发生这种情况。您可能需要将 repo 列入白名单。

      【讨论】:

        【解决方案7】:

        这通常与网络服务器没有有效的 SSL 证书有关。无效的 SSL 证书可能是由于它是自签名的且不受 CA 信任,或者证书已被 CA 吊销。

        使用未经身份验证的 URL 可能是解决此问题的一种方法,但该问题的解决方案是确保 SSL 证书有效。

        【讨论】:

          【解决方案8】:

          在我的例子中,我们有阻止 .EXE 下载的规则,因此我们在 .nuget 解决方案文件夹中保留了 NuGet.exe 的副本,就在 NuGet.targets 和 NuGet.Config 旁边

          无论出于何种原因,新分支中都缺少此功能。

          【讨论】:

            猜你喜欢
            • 2022-01-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多