NuGet在代理后面

130

我发现自从2011年6月的1.4版本起,NuGet允许代理设置配置。但是,我找不到任何命令行示例。

我正在尝试运行一些构建,但NuGet无法连接。

我该如何在命令行上配置代理设置?


2
为了其他用户遇到代理问题的利益:如果NuGet显示消息:“远程名称无法解析:'nuget.org'”,则您将知道可能是代理问题。 - pduncan
5
请注意检查http_proxyhttps_proxy环境变量以及您的系统代理设置。 - Colonel Panic
1
现在在Github上有一个问题: https://github.com/NuGet/Home/issues/458 - thekip
16个回答

247

以下是我使用企业代理服务器NTLM身份验证的方法,让它正常工作。我下载了 NuGet.exe 然后运行了下面这些命令(我在CodePlex上这个讨论的评论中找到了这些命令):

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

我将以下内容放入了我的NuGet.config文件中,该文件位于%appdata%\NuGet目录下(在我的Windows 7电脑上映射到C:\Users\myUserName\AppData\Roaming):

<configuration>
    <!-- stuff -->
    <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>
    <!-- stuff -->
</configuration>

顺便提一下,这也解决了我在Visual Studio中第一次访问软件包源时NuGet只能工作一次的问题。

请注意,有些人尝试过这种方法后通过评论报告说他们能够省略从命令行设置http_proxy.password键或者在配置文件中事后删除它,并且仍然能够使NuGet跨代理正常工作。

如果您发现必须在NuGet配置文件中指定密码,请记住当您更改网络登录信息时,您必须从命令行更新NuGet配置中存储的密码,如果您的代理凭据也是您的网络凭据


31
在我的情况下,我完全省略了http_proxy.password密钥,它似乎很高兴通过我的认证AD凭据。这样可以避免频繁更改密码的需要。 - Sir Crispalot
11
警告:在使用arcain建议的配置时,请小心。确保在更改Windows密码时更改配置文件中的密码。按公司政策更改密码后,我的Windows帐户被随机锁定。花费了我几个小时才弄清楚是这个配置条目导致了整个问题。最好的选择是像@Sir Crispalot建议的那样简单地删除http_proxy.password键。 - A J Qarshi
5
请尝试一下Sir Crispalot提到的方法,移除http_proxy.password密钥。这对于一些人来说是有效的,可以避免必须更改NuGet配置文件中的密码。 - arcain
6
这里又取得了一次胜利——使用这些设置并省略密码键,我在我的公司代理服务器上成功进行了 NTLM 认证。 - Cᴏʀʏ
3
它可以在没有用户名和密码的情况下工作,如果 Visual Studio 已经打开,您需要重新启动它 :) - Emil
显示剩余6条评论

28

或许您可以尝试将此内容添加到 devenv.exe.config

<system.net>
    <defaultProxy useDefaultCredentials="true" enabled="true">
        <proxy proxyaddress="http://proxyaddress" />
    </defaultProxy>
    <settings>
        <servicePointManager expect100Continue="false" />
        <ipv6 enabled="true"/>
    </settings>
</system.net>

我从NuGet问题跟踪器中发现了它。

还有其他关于NuGet和网络问题的有价值的评论。


2
但是这假设已经安装了devenve.exe(即Visual Studio),而在构建服务器上不应该安装。 - Kat Lim Ruiz
我不得不删除这个设置才能使其正常工作,以便遵循IE的代理设置。 - Rosdi Kasim
xml <system.net> <defaultProxy useDefaultCredentials="true" enabled="true"> </defaultProxy> <settings> <ipv6 enabled="true"/> </settings> </system.net> `这段代码将使用系统代理设置,已在Windows 10上进行了测试。 - Van Thoai Nguyen

15

如果您正在使用 NuGet 的 HTTPS 版本,请注意您必须使用 HTTPS 设置以下值:

  • https_proxy
  • https_proxy.user
  • https_proxy.password

2
如果你按照Arcains的指南使用https,那么nuget.config中的https密码就是明文。 - dmce
这解决了我的问题,更多细节请参见 https://github.com/NuGet/Home/issues/5980。 - jpierson
如果我们正在使用Nuget的https版本,那么我们不能使用“http”来设置代理地址吗? - coder kemp

8

2
当你的公司的组策略不断将IE设置恢复为与Nuget不兼容的设置时,这种方法存在问题,这在我的工作场所经常发生。 - Xcalibur

7

同样是“代理NuGet”的另一种方式:您可以将NuGet代理设置为通过Fiddler连接。以下命令将在默认的NuGet配置文件中保存用户的代理设置,路径为%APPDATA%\NuGet\NuGet.Config

nuget config -Set HTTP_PROXY=http://127.0.0.1:8888

每当您需要 NuGet 访问互联网时,只需打开 Fiddler,假设您的 Fiddler 正在监听默认端口 8888。

这个配置不会受到密码更改的影响,因为 Fiddler 将为您解决任何与上游代理的身份验证。


6
我的解决方案是包含以下内容:
<configuration>
  <config>
    <add key="http_proxy" value="http://<IP>:<Port>" />
    <add key="http_proxy.user" value="<user>" />
    <add key="http_proxy.password" value="<password>" />
  </config>
</configuration>

nuget.config 文件中。

2
我在哪里可以找到这个文件? - Marcelo Machado
3
@MarceloMachado:这里:%AppData%\NuGet\NuGet.config - Torben Kohlmeier
3
Windows 10 上用户的 Nuget.config 文件位置为:%AppData%\Roaming\Nuget\NuGet.config。 - Stato Machino
2
你可以选择仅使用 <add key="http_proxy" value="http://<IP>:<Port>" /> 而不指定用户名和密码。记得在此之后重新启动 Visual Studio! - taylorswiftfan
1
重启VS很重要!另外,我认为我在以管理员身份运行时遇到了问题(需要以普通用户身份运行?) - Mars
另外还有两个有用的选项:您也可以添加“https_proxy”和“no_proxy”值。此外,我发现默认的NuGet配置文件位于“%APPDATA%\NuGet”,但您可以在解决方案目录中定义nuget.config文件,以覆盖该默认文件。 - bas

5

对于使用VS2015的用户:我遇到了一个“407代理身份验证”错误,这导致我的构建失败。经过几个小时的调查,发现MSBuild在尝试下载Nuget作为“DownloadNuGet”目标的一部分时没有发送凭据。解决方案是将以下XML添加到C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe.config文件中<configuration>元素内:

<system.net>
            <defaultProxy useDefaultCredentials="true">
            </defaultProxy>
</system.net>

4
也许这可以帮助其他人。对我来说,解决方案是在Visual Studio(2015/2017)上打开NuGet设置并添加新的反馈URL:http://www.nuget.org/api/v2/
我不需要更改任何代理相关设置。

这对我来说是获胜者。奇怪的是,在我的立方体PC上,原始提要URL可以工作,但在实验室PC上(更“安全”的网络上)失败了。 - Andrew Queisser

2

2
在获取内部公司存储库时,对我很有效,可以解决407错误。 - thudbutt

1
你好,我希望进入%appdata%/Roaming/Nuget/NuGet.Config并删除除软件包源之外的所有行。这样应该会得到类似于以下内容的结果。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
  </packageSources>
</configuration>

完整路径应为C:\ Users<username>\ AppData \ Roaming \ NuGet \ NuGet.Config

基本上设置了代理,我不知道为什么和如何设置,但它存在,并且我也无法ping通。


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