在公司代理后访问Nuget官方包源

18

我正在尝试在工作中使用VS2010中的Nuget。但是,当我尝试从官方源下载packages时,总是出现403错误。

我已经了解到Nuget将使用与IE相同的代理设置,这对我来说很不幸,因为我的IE被锁定了,我无法更改代理设置。

我已经修改了获取feedservice url的URL,在IE中会出现错误,在Firefox(使用本地proxy.pac)中,URL可以正确解析,我可以看到feeds。

是否有任何方式手动配置Nuget而不使用IE的设置呢?

5个回答

25

如果您无法将异常添加到代理中,或者只是想要一个立即可用的解决方案,则可以编辑位于Visual Studio安装目录下(例如 - C:\Program Files(x86)\Microsoft Visual Studio 10.0\Common7\IDE)的Visual Studio配置文件(devenv.exe.config),并将<system.net>配置部分更改/添加为以下内容,这样将允许Visual Studio与代理一起使用:

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

你所需要做的就是将<Insert proxy address here>更改为你公司的代理地址。另外,根据你的代理设置,你可能可以使用Expect100Continue消息,并且可能不需要更改该配置元素。你可以在这里找到更多信息。


4
补充一点,由于Program Files目录的保护级别已经提高,可能需要以管理员身份编辑.config文件。 - Colin Mackay
在没有安装VS的构建服务器上,是否有类似的TFS配置文件?我可以看到这可能会成为我以后的一个问题... - pete the pagan-gerbil

18

以下内容来自我最近回答的相关问题。

我是这样解决我的企业代理使用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配置中存储的密码,如果您的代理凭据也是您的网络凭据


1
嗅探器在407上不起作用。无论如何,在这里都不行。 - Benjol
@Benjol 为了解决我办公室代理服务器后面的407错误,这个方法很管用。很抱歉它对你没用。也许你可以尝试从NuGet命令行玩弄各种http_proxy设置,看看是否有所帮助。 - arcain
我应该补充说明,这是针对NuGet“自动下载”nuget.exe文件到.nuget文件夹的情况。当操作是“用户启动”的时候,代理显然知道它是“我”,所以这可以工作。从那时起,我已经放弃了.nuget文件夹。 - Benjol

2

如果您不知道代理设置,而NuGet正在要求代理用户和密码,您可以尝试在Visual Studio安装目录下的devenv.exe.config文件中添加以下内容,在<system.net>标签之间:

<defaultProxy useDefaultCredentials="true" enabled="true">
  <proxy usesystemdefault="True"/>
</defaultProxy>

根据你使用的VisualStudio版本,应该是这个样子的:
  <system.net>
    <defaultProxy useDefaultCredentials="true" enabled="true">
      <proxy usesystemdefault="True"/>
    </defaultProxy>
    <settings>
      <ipv6 enabled="true" />
    </settings>
  </system.net>

甚至不需要提供代理地址,它对我起作用了 :) 实际上这应该是默认行为,我浪费了很多时间来克服这个问题...


2
我已经成功说服IT部门允许无限制访问packages.nuget.org,所以问题解决了。我们在这里使用Sophos,它会阻止任何它不喜欢的网络请求。这也适用于Nuget网址。解决方法是使用库包管理器启动Fiddler运行安装程序。然后将被禁止的URL复制到我的浏览器中,并告诉Sophos它是安全的。然后我就可以成功地进行安装程序了。希望这对那些被武装防火墙难倒的人有所帮助。

0

我在使用Nuget控制台访问Nuget网站时遇到了问题。 "从传输流中收到意外的EOF或0字节。" 最终发现是代理问题,因为我的工作代理是“隐形”的,没有配置选项。我通过以下步骤解决了我的问题。

  1. 以管理员身份打开Visual Studio
  2. 打开Visual Studio内置浏览器(查看|其他窗口|Web浏览器)
  3. 进入您的银行网站或其他使用SSL的网站
    可能需要实际登录该网站,但我没有。
  4. 然后在Nuget控制台中运行Install-package命令。
  5. 命令无错误运行。

这可能有助于解决以下问题:

我希望这可以帮助到你。

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