Visual Studio 2015 中的包管理器“407(需要代理身份验证)”

Package manager in Visual Studio 2015 "407 (Proxy Authentication Required)"

我知道这是一个经常被问到的问题,但是经过几天的研究我还没有找到这个特定问题的答案。


我有一个新的 ASP.NET 5 (Core 1.0) MVC 模板,我正在尝试向其中添加一个包,但是每次我进入包管理器输出时:

Response status code does not indicate success: 407 (Proxy Authentication Required). 

以及解决方案资源管理器顶部的以下内容:

我的设置看起来不错,我可以在 'Manage Packages for Solution' 屏幕中浏览包。

我知道我被要求提供凭证,那么我应该在哪里输入它们?另一方面,我机器上的所有其他应用程序都已验证互联网访问权限,那我为什么要这样做?

非常欢迎任何想法/指点。

Visual Studio 2015 - 14.0.24720.00 更新 1
Visual Studio2015-3.3.0.167

的 NuGet 包管理器

包管理器输出的顶部部分:

正在安装 NuGet 包 AutoMapper.4.2.1.
已成功将 'AutoMapper 4.2.1' 安装到 CustomerPortal
==========完成==========
PATH=.\node_modules.bin;%PATH%;C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Web Tools\External;C:\Program Files (x86) \微软Visual Studio14.0\Common7\IDE\Extensions\Microsoft\WebTools\External\git
C:\Users\medmondson.dnx\runtimes\dnx-clr-win-x86.1.0.0-rc1-update1\bin\dnx.exe "C:\Users\medmondson.dnx\runtimes\dnx-clr-win-x86.1.0.0-rc1-update1\bin\lib\Microsoft.Dnx.Tooling\Microsoft.Dnx.Tooling.dll" 恢复 "M:\visual studio 2015\Projects\CustomerPortal\src\CustomerPortal" -f "C:\Program Files (x86)\Microsoft Web Tools\DNU"
Microsoft .NET 开发实用程序 Clr-x86-1.0.0-rc1-16231
获取 https://www.nuget.org/api/v2/
获取 http://packages.nuget.org/v1/FeedService.svc/
获取 https://www.postsharp.net/nuget/packages/
恢复 M:\visual studio 2015\Projects\CustomerPortal\src\CustomerPortal\project.json
的包 获取 https://www.nuget.org/api/v2/FindPackagesById()?id='AutoMapper'
获取 http://packages.nuget.org/v1/FeedService.svc/FindPackagesById()?id='AutoMapper'
获取 https://www.postsharp.net/nuget/packages/FindPackagesById()?id='AutoMapper'
警告:FindPackagesById:AutoMapper
发送请求时出错。
获取 https://www.nuget.org/api/v2/FindPackagesById()?id='AutoMapper'
获取 https://www.nuget.org/api/v2/FindPackagesById()?id='System.Collections.Immutable'
获取 http://packages.nuget.org/v1/FeedService.svc/FindPackagesById()?id='System.Collections.Immutable'
获取 https://www.postsharp.net/nuget/packages/FindPackagesById()?id='System.Collections.Immutable'
警告:FindPackagesById:AutoMapper
发送请求时出错。
获取 https://www.postsharp.net/nuget/packages/FindPackagesById()?id='AutoMapper'
警告:FindPackagesById:AutoMapper
响应状态代码不表示成功:407(需要代理身份验证)。

更新

我已经成功捕获了一个 non-working 请求(返回 407)和一个工作请求 唯一的区别是 Proxy-Authorization header 的内容 哪个更长。这表明代理身份验证确实存在,但它使用的是不同的协议。

几周前我遇到了同样的问题。对我来说,在 machine.config (Windows/Microsoft.NET/Framework64/v4.0.30319/Config)

中加入以下内容很有帮助
<system.net>
   <settings>
       <ipv6 enabled="True"/>
   </settings>
   <defaultProxy useDefaultCredentials="True" enabled="True">
       <proxy proxyaddress="http://your.proxyserver.ip:port"/>
   </defaultProxy>
</system.net>

我必须修改 32 位 machine.config(假设 VS 在 32 位运行)以添加 <system.net> 部分但省略任何内容<defaultProxy> 标签:

<system.net>
    <defaultProxy useDefaultCredentials="True" enabled="True" />
</system.net>

根据MSDN

If the defaultProxy element is empty, the proxy settings from Internet Explorer will be used.

这对我来说是完美的,因为我机器上的所有其他应用程序都可以正常工作——包括 IE。

manchine.config 位置 (Win 7): %SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319\Config\machine.config


备注

感谢@user3063127 为我指明了正确的方向(您投了赞成票),我解决了这个问题。据我所知,这只会影响 DNX 项目的包恢复,并且可能会在 RC2 发布时得到修复。

如果你安装了Fiddler,勾选规则选项下的选项'Automatically Authenticate',应该可以解决上述问题。

Selecting the Automatically Authenticate

从以下 post 获得此信息 Configuring Fiddler to use company network's proxy?

  1. 更新到最新 nuget.exe 第一

    nuget update self
    
  2. 在配置文件中添加了代理详细信息:

    nuget config -Set http_proxy=http://username:password@proxyserver.company.com:port
    

如果您不知道代理服务器的详细信息,可以使用其他解决方法来解决此错误“407(需要代理授权。)”

解决方法: 1. Download/Install 提琴手 2. 点击菜单规则 -> 自动验证

不关闭Fiddler,现在尝试在Visual Studio中恢复包。它现在应该可以在没有任何代理错误的情况下恢复包。

这不是一个完美的解决方案,但仍然是解决此问题的替代解决方法。此解决方案尝试使用 Fiddler 作为代理。

您需要修改文件 2.config 文件:

对于 Visual Studio 2015

  • C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\vsn.exe.config
  • C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe.config

2017 年 Visual Studio

  • C:\Program Files (x86)\Microsoft Visual Studio17\Community\Common7\IDE\vsn.exe.config
  • C:\Program Files (x86)\Microsoft Visual Studio17\Community\Common7\IDE\devenv.exe.config
<system.net>
  <defaultProxy enabled="true" useDefaultCredentials="true">
    <proxy usesystemdefault="True" bypassonlocal="True" proxyaddress="http://yourproxy:proxyport" />
    <bypasslist>
      <add address="(.*\.)?anyotherdomain\.com?(.*)" />
      <add address="(.*\.)?nuget\.org?(.*)" />
      <add address="192\.168\.\d{1,3}\.\d{1,3}" />
    </bypasslist>
  </defaultProxy>
  <settings>
    <ipv6 enabled="false"/>
    <servicePointManager expect100Continue="false"/>
  </settings>
</system.net>

如果没有代理,您仍然可以从 DNS 服务器获取它的 IP,并且没有其他东西阻止它,nuget.org 的绕过将起作用。

也需要这个来安装nuget

打开文件 C:\Users\[YOUR_USER_NAME]\AppData\Roaming\NuGet\NuGet.Config 并在 <configuration> <\configuration> 标签内添加以下内容:

<config>
  <add key="http_proxy" value="http://yourproxy:proxyport" />
</config>

摘自Marco Mengoli's Blog

可能您在凭据管理器中的代理凭据有误。尝试删除它。

控制面板 -> 用户帐户 -> 凭据管理器。

删除代理凭据解决了我的问题。

添加代理用户名、密码解决了我的 407 身份验证问题。

将以下代码片段放入位于 C:\Users\myUserName\AppData\Roaming

的 NuGet.config 文件中
<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="[base64 encoded Password]" />
   </config>

</configuration>

参考:https://forums.asp.net/t/2096179.aspx?Proxy+407+Access+Denied