【问题标题】:NuGet behind a proxy代理背后的 NuGet
【发布时间】:2012-03-03 04:20:24
【问题描述】:

我发现 NuGet 从1.4 version (June 2011) 开始就允许进行代理设置配置。但是,我找不到任何命令行示例。

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

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

【问题讨论】:

  • 为了其他用户遇到代理问题:如果 NuGet 显示消息:“无法解析远程名称:'nuget.org'”,您将知道它可能是代理。跨度>
  • 请仔细检查http_proxyhttps_proxy 环境变量以及您的系统代理设置
  • github 上有一个问题:github.com/NuGet/Home/issues/458

标签: c# msbuild nuget


【解决方案1】:

这是我为使用 NTLM 身份验证的公司代理所做的工作。我下载了 NuGet.exe,然后运行了以下命令(我在 CodePlex 上的 this discussion 的 cmets 中找到了这些命令):

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

这会将以下内容放入我位于%appdata%\NuGetNuGet.config(映射到我的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 中点击包源时才工作。

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

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

【讨论】:

  • 在我的例子中,我完全省略了 http_proxy.password 密钥,它似乎很乐意通过我经过身份验证的 AD 凭据。这样就不用经常更改密码了。
  • 警告 使用arcain建议的配置时要小心。更改 Windows 密码时,请确保更改配置文件中的密码。根据公司政策更改密码后,我的 Windows 帐户被随机锁定。我花了几个小时才弄清楚它的这个配置条目导致了这整个麻烦。最好的选择是按照@Sir Crispalot 的建议删除 http_proxy.password
  • 试试 Crispalot 爵士提到的内容并删除 http_proxy.password 密钥。这对某些人有效,让他们不必更改 NuGet 配置文件中的密码。
  • 这里的另一个胜利 - 使用这些设置并省略密码密钥在我的公司代理后面使用 NTLM 身份验证对我有用。
  • 它无需用户名和密码即可工作,如果它已打开,您需要重新启动 VS :)
【解决方案2】:

也许你可以在你的 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 Issue tracker找到的

还有其他关于 NuGet + 网络问题的有价值的 cmets。

【讨论】:

  • 但这假设安装了 devenv.exe(即 Visual Studio),它不应该在构建服务器中
  • 我必须删除此设置才能使其正常工作,以便它遵循 IE 的代理设置。
  • xml &lt;system.net&gt; &lt;defaultProxy useDefaultCredentials="true" enabled="true"&gt; &lt;/defaultProxy&gt; &lt;settings&gt; &lt;ipv6 enabled="true"/&gt; &lt;/settings&gt; &lt;/system.net&gt; 为我工作,它使用了系统代理设置。在 WINDOWS 10 上测试
【解决方案3】:

如果您使用的是 HTTPS 版本的 NuGet,请注意您必须使用 HTTPS 设置值。

  • https_proxy
  • https_proxy.user
  • https_proxy.password

【讨论】:

  • https 密码是 nuget.config 中的纯文本,如果您遵循 arcains 指南但使用 https
  • 这解决了我的问题,更多细节在这里github.com/NuGet/Home/issues/5980
  • 如果我们使用的是https版本的nuget,我们不能使用'http'来设置代理地址吗?
【解决方案4】:

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

如果它发现您需要登录,它会打开一个对话框并要求您这样做(即登录)。

请看这里的描述 -> http://docs.nuget.org/docs/release-notes/nuget-1.5

【讨论】:

  • 确实如此 - 当您的公司的组策略不断将您的 IE 设置恢复为不适用于 Nuget 的设置时,就会出现这种方法的问题,就像在我的工作地点发生的那样
【解决方案5】:

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

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

当您需要 nuget 访问互联网时,只需打开 Fiddler,假设您有 fiddler 在默认端口 8888 上侦听。

此配置对密码更改不敏感,因为 fiddler 将使用上游代理为您解析任何身份验证。

【讨论】:

    【解决方案6】:

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

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

    【讨论】:

      【解决方案7】:

      我的解决方案是包含

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

      【讨论】:

      • 在哪里可以找到这个文件?
      • @MarceloMachado:这里:%AppData%\NuGet\NuGet.config
      • 用户在 Windows 10 上的 nuget.config 位置:%AppData%\Roaming\Nuget\NuGet.config
      • 您可以选择单独执行``,无需指定用户名和密码。之后记得重启 Visual Studio!
      • 重启VS很重要!另外,我认为我以管理员身份运行时遇到了问题(需要以普通用户身份运行?)
      【解决方案8】:

      也许这对其他人有帮助。对我来说,解决方案是在 Visual Studio (2015/2017) 上打开 NuGet 设置并添加新的提要 URL:http://www.nuget.org/api/v2/

      我不必更改任何与代理相关的设置。

      【讨论】:

        【解决方案9】:

        在我开发的 Windows Server 2016 Standard 上,我只需打开凭据管理器控制面板并清除不再有效的 Visual Studio 缓存代理设置,然后重新启动 Visual Studio。下次我打开 Nuget 包管理器时,系统提示我输入代理凭据,这让我再次工作。

        见:https://support.microsoft.com/en-us/help/4026814/windows-accessing-credential-manager

        【讨论】:

        • 在内部公司回购出现 407 错误时为我工作。
        【解决方案10】:

        只是一个小小的补充......

        如果只提供 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 文件。

        【讨论】:

          【解决方案11】:

          你好,我进入

          %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\AppData\Roaming\NuGet\NuGet.Config

          基本上有一个代理集,我不知道它是如何以及为什么设置的,但它就在那里,我也无法 ping 它。

          【讨论】:

            【解决方案12】:

            试试this。基本上,如果您的系统不信任 nuget 证书,连接可能会失败。

            【讨论】:

              【解决方案13】:

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

              .msecnd.net
              

              【讨论】:

                【解决方案14】:

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

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

                2. 我也改为使用 that(nuget.org) 作为包源的首选
                  我确实取消选中我的公司包来源以确保始终选择 nuget 来自全球资源。

                【讨论】:

                  【解决方案15】:

                  作为一个迟到的答案,对我来说这里没有任何效果。我想这可能取决于您的公司代理或nuget 的实现方式,但由于某种原因,我设置了以下环境变量:http_proxyhttps_proxy。删除它们后,nuget 开始正常工作。

                  【讨论】:

                    猜你喜欢
                    • 2014-05-04
                    • 2018-10-27
                    • 2012-02-14
                    • 2017-05-19
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多