NuGet代理背后


104

我发现NuGet从1.4版本开始允许代理设置配置。但是,我找不到任何命令行示例。

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

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


1
为了使其他用户遇到代理问题:如果NuGet显示以下消息,您将知道它可能是代理:“无法解析远程名称:'nuget.org'”
pduncan

4
要注意检查http_proxyhttps_proxy环境变量,以及你的系统代理设置
上校恐慌

github上现在有一个问题:github.com/NuGet/Home/issues/458
thekip 2015年

Answers:


202

这是我与使用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>

顺便说一句,这也解决了我与NuGet的问题,仅在我第一次在Visual Studio中访问程序包源时有效。

请注意,一些尝试过这种方法的人通过评论报告说,他们已经能够http_proxy.password从命令行中省略设置密钥,或者事后从配置文件中将其删除,并且仍然具有NuGet功能。跨代理。

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


NuGet命令行没有将条目添加到我的NuGet.config文件中,但是一旦我手动编辑了文件,它就可以很好地工作。
普顿坎

19
就我而言,我完全省略了http_proxy.password密钥,并且似乎很乐意通过身份验证的AD凭据。这省去了频繁更改密码的需要。
克里斯帕洛特爵士

5
警告使用Arcain建议的配置时请小心。更改Windows密码时,请确保在配置文件中更改密码。根据公司政策更改密码后,我的Windows帐户被随机锁定。我花了几个小时才弄清楚它的这个配置条目导致了整个麻烦。最好的选择是按照@Sir Crispalot
AJ Qarshi

3
尝试Crispalot爵士提到的内容,并删除http_proxy.password密钥。这对某些人有效,并允许他们避免在NuGet配置文件中更改密码。
arcain 2014年

4
在这里的另一个胜利-使用这些设置并省略了密码密钥,这对我的具有NTLM身份验证的企业代理背后的工作非常有用。
Cᴏʀʏ

22

也许您可以将其尝试到您的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 2014年

我必须删除此设置才能使其正常运行,以便它遵循IE的代理设置。
Rosdi Kasim

xml <system.net> <defaultProxy useDefaultCredentials="true" enabled="true"> </defaultProxy> <settings> <ipv6 enabled="true"/> </settings> </system.net> 为我工作,它使用了系统代理设置。在WINDOWS 10上测试
Van Thoai Nguyen

11

万一您使用的是nuget的https版本(https://www.nuget.org),请注意,必须使用https设置值。

  • https_proxy
  • https_proxy.user
  • https_proxy.password

1
如果您遵循arcains指南但使用https
nuget.config中

这解决了我的问题,更多详细信息请参见github.com/NuGet/Home/issues/5980
jpierson

因此,如果我们使用的是nuget的https版本,则不能使用“ http”设置代理地址?
编码器kemp18,2018年

8

我可能是错的,但我认为它使用了IE的代理设置。

如果看到您需要登录,它将打开一个对话框,并要求您登录(即登录)。

请在这里查看此说明-> http://docs.nuget.org/docs/release-notes/nuget-1.5


1
确实如此-当您公司的组策略不断将您的IE设置还原为与Nuget不兼容的IE设置时(例如在我的工作地点),会出现这种方法的问题
Xcalibur

5

对于使用VS2015的任何人:我遇到“需要407代理身份验证”错误,这破坏了我的构建。经过几个小时的调查,事实证明,MSBuild在尝试下载Nuget作为“ DownloadNuGet”目标的一部分时未发送凭据。解决方案是将以下XML添加到<configuration>元素内部的C:\ Program Files(x86)\ MSBuild \ 14.0 \ Bin \ MSBuild.exe.config中:

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

4

我的解决方案是包括

<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文件中。


1
在哪里可以找到此文件?
马塞洛·马查多

2
@MarceloMachado:此处:%AppData%\ NuGet \ NuGet.config
Torben Kohlmeier

Windows 10上用户的nuget.config位置:%AppData%\ Roaming \ Nuget \ NuGet.config
Stato

您可以选择单独执行`<add key =“ http_proxy” value =“ http:// <IP>:<Port>” />`而不指定用户名和密码。切记在那之后重新启动Visual Studio!
taylorswiftfan

重新启动VS很重要!此外,我认为我在以管理员身份运行时遇到了问题(需要以普通用户身份运行吗?)
Mars

4

相同的“ nuget代理”的另一种风味:或者,您可以设置nuget proxing设置以通过fiddler连接。在cmd下面,会将代理设置保存在默认的nuget配置文件中,供用户使用%APPDATA%\NuGet\NuGet.Config

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

每当您需要nuget才能访问Internet时,只需打开Fiddler,假设您的Fiddler监听默认端口8888。

此配置对密码更改不敏感,因为提琴手将为您解析任何带有上游代理的身份验证。



1

只是一小部分...

如果它只为您提供http_proxy设置,而不提供用户名和密码,则建议将代理设置放在项目本地nuget.config文件中,并将其提交给源代码管理。这样,所有团队成员都将获得相同的设置。

创建一个空的。\ nuget.config

   <?xml version="1.0" encoding="utf-8"?>
   <configuration>
   </configuration>

然后:

   nuget config -Set http_proxy="http://myproxy.example.com:8080" -ConfigFile .\Nuget.Config

最后提交新项目的本地Nuget.config文件。



0

除了@arcain的建议外,我还必须将以下Windows Azure内容传递网络url添加到我们的代理服务器的白名单中:

.msecnd.net

0

通过@arcain Plus的上述解决方案加上以下步骤解决了我的问题

  1. 修改Nuget软件包管理器设置下的“软件包源”以选中复选框以使用nuget.org设置可以解决我的问题。

  2. 我也做了更改,将(nuget.org)用作软件包源的首选,
    我取消了对公司软件包源的检查,以确保nuget始终从全球资源中获取。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.