NuGet za serwerem proxy

105

Doszedłem do wniosku, że NuGet umożliwia konfigurację ustawień proxy od wersji 1.4. Ale nie mogę znaleźć żadnego przykładu wiersza poleceń.

Próbuję uruchomić jakąś kompilację, a NuGet nie może się połączyć.

Jak skonfigurować ustawienia proxy w wierszu poleceń?

Ricardo
źródło
1
Z korzyścią dla innych użytkowników napotykających problemy z serwerem proxy: będziesz wiedział, że może to być serwer proxy, jeśli program NuGet wyświetli komunikat: „Nie można rozwiązać nazwy zdalnej:„ nuget.org ””
pduncan,
4
Uważaj, aby sprawdzić zmienne środowiskowe http_proxyi, https_proxya także ustawienia serwera proxy w systemie
Colonel Panic
Jest z tym problem na github: github.com/NuGet/Home/issues/458
thekip

Odpowiedzi:

205

Oto, co zrobiłem, aby to działało z moim korporacyjnym serwerem proxy, który używa uwierzytelniania NTLM. Pobrałem NuGet.exe a następnie prowadził następujące polecenia (które znalazłem w komentarzach do tej dyskusji na 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

To umieściło następujące w mojej NuGet.configlokalizacji %appdata%\NuGet(która mapuje do C: \ Users \ myUserName \ AppData \ Roaming na moim komputerze z systemem Windows 7):

<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>

Nawiasem mówiąc, rozwiązało to również mój problem z NuGet działającym tylko przy pierwszym trafieniu do źródła pakietu w programie Visual Studio.

Zwróć uwagę, że niektóre osoby, które wypróbowały to podejście, zgłosiły w komentarzach, że udało im się pominąć ustawienie http_proxy.passwordklucza z wiersza poleceń lub usunąć go po fakcie z pliku konfiguracyjnego i nadal mogły mieć funkcję NuGet przez proxy.

Jeśli jednak okaże się, że musisz określić swoje hasło w pliku konfiguracyjnym NuGet, pamiętaj, że musisz zaktualizować przechowywane hasło w konfiguracji NuGet z wiersza polecenia podczas zmiany logowania sieciowego, jeśli poświadczenia serwera proxy są również Twoją siecią poświadczenia .

arcain
źródło
Wiersz polecenia NuGet nie dodał wpisów do mojego pliku NuGet.config, ale po ręcznej edycji pliku działał świetnie.
pduncan
20
W moim przypadku całkowicie pominąłem klucz http_proxy.password i wydawało się, że z przyjemnością przechodzę przez moje uwierzytelnione poświadczenia AD. Dzięki temu nie trzeba często zmieniać hasła.
Sir Crispalot
5
Ostrzeżenie Zachowaj ostrożność podczas korzystania z konfiguracji sugerowanej przez arcain. Upewnij się, że zmieniasz hasło w pliku konfiguracyjnym, gdy zmieniasz hasło systemu Windows. Moje konto Windows zostało losowo zablokowane po zmianie hasła zgodnie z polityką firmy. Zajęło mi kilka godzin, zanim zorientowałem się, że ten wpis w konfiguracji powoduje cały ten problem. Najlepszą opcją jest po prostu usunięcie klucza http_proxy.password , zgodnie z sugestią @Sir Crispalot
AJ Qarshi
3
Wypróbuj to, o czym wspomniał Sir Crispalot i usuń klucz http_proxy.password. To zadziałało w przypadku niektórych osób i pozwoliło im uniknąć konieczności zmiany hasła w pliku konfiguracyjnym NuGet.
arcain
4
Kolejne zwycięstwo - użycie tych ustawień i pominięcie klucza hasła działało za moim korporacyjnym serwerem proxy z uwierzytelnianiem NTLM.
Cᴏʀʏ
22

Może mógłbyś spróbować tego na swoim 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>

Znalazłem go w narzędziu do śledzenia problemów NuGet

Istnieją również inne cenne komentarze dotyczące problemów z siecią NuGet +.

Tx3
źródło
2
ale przy założeniu, że jest zainstalowany devenve.exe (czyli Visual Studio), który nie powinien znajdować się na serwerze kompilacji
Kat Lim Ruiz
Musiałem usunąć to ustawienie, aby działało, tak aby było zgodne z ustawieniami proxy IE.
Rosdi Kasim,
xml <system.net> <defaultProxy useDefaultCredentials="true" enabled="true"> </defaultProxy> <settings> <ipv6 enabled="true"/> </settings> </system.net> Pracowałem dla mnie, używał systemowych ustawień proxy. Testowane w
systemie
11

Na wszelki wypadek, gdy używasz wersji https nuget ( https://www.nuget.org ), pamiętaj, że musisz ustawić wartości przy użyciu https.

  • https_proxy
  • https_proxy.user
  • https_proxy.password
Roman Mahrer
źródło
1
Hasło https jest zwykłym tekstem w nuget.config, jeśli postępujesz zgodnie z przewodnikiem Arcains, ale używasz protokołu HTTPS
dmce
To rozwiązało mój problem, więcej szczegółów tutaj github.com/NuGet/Home/issues/5980 .
jpierson
Więc nie możemy użyć „http” do ustawienia adresu proxy, jeśli używamy wersji https pakietu NuGet?
koder kemp
8

Mogę się mylić, ale myślałem, że używa ustawień proxy IE.

Jeśli zauważy, że musisz się zalogować, otwiera okno dialogowe i prosi o zrobienie tego (czyli logowanie).

Zobacz opis tego tutaj -> http://docs.nuget.org/docs/release-notes/nuget-1.5

David McLean
źródło
1
Tak - problem z tym podejściem pojawia się, gdy polityka grupowa Twojej korporacji nieustannie przywraca ustawienia IE do ustawień, które nie działają z Nuget, tak jak ma to miejsce w moim miejscu pracy
Xcalibur
5

Dla każdego, kto używa VS2015: napotkałem błąd „Wymagane uwierzytelnienie serwera proxy 407”, który zepsuł moją kompilację. Po kilku godzinach badania okazuje się, że MSBuild nie wysyłał poświadczeń podczas próby pobrania Nuget w ramach celu „DownloadNuGet”. Rozwiązaniem było dodanie następującego XML do C: \ Program Files (x86) \ MSBuild \ 14.0 \ Bin \ MSBuild.exe.config wewnątrz <configuration>elementu:

<system.net>
            <defaultProxy useDefaultCredentials="true">
            </defaultProxy>
</system.net>
r590
źródło
4

Rozwiązaniem dla mnie było włączenie

<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>

W nuget.configpliku.

jfernandeze
źródło
1
Gdzie mogę znaleźć ten plik?
Marcelo Machado
2
@MarceloMachado: Tutaj:% AppData% \ NuGet \ NuGet.config
Torben Kohlmeier
lokalizacja nuget.config użytkownika w systemie Windows 10:% ​​AppData% \ Roaming \ Nuget \ NuGet.config
Stato Machino
Możesz wybrać opcję `<add key =" http_proxy "value =" http: // <IP>: <Port> "/>` samodzielnie, bez określania nazwy użytkownika i hasła. Pamiętaj o ponownym uruchomieniu Visual Studio po tym!
taylorswiftfan
Ponowne uruchomienie VS jest ważne! Także myślę, że miałem problemy z systemem jako administrator (potrzebne do pracy jako zwykły użytkownik?)
Mars
4

Inny wariant tego samego „serwera proxy dla nuget”: alternatywnie możesz ustawić ustawienia serwera proxy nuget, aby łączyć się przez skrzypce . Poniżej cmd zapisze ustawienia serwera proxy w domyślnym pliku konfiguracji NuGet dla użytkownika pod adresem%APPDATA%\NuGet\NuGet.Config

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

Zawsze, gdy potrzebujesz nuget, aby połączyć się z Internetem, po prostu otwórz Fiddlera, zakładając, że masz fiddler nasłuchujący na domyślnym porcie 8888.

Ta konfiguracja nie jest wrażliwa na zmiany hasła, ponieważ skrzypek rozwiąże za Ciebie wszelkie uwierzytelnianie za pomocą serwera proxy nadawczego.

Aishel M.
źródło
2

Może to pomoże komuś innemu. Dla mnie rozwiązaniem było otwarcie ustawień NuGet w programie Visual Studio (2015/2017) i dodanie nowego adresu URL źródła: http://www.nuget.org/api/v2/ .

Nie musiałem zmieniać żadnych ustawień związanych z proxy.

Juliano Nunes Silva Oliveira
źródło
1

Tylko mały dodatek ...

Jeśli działa, aby podać tylko ustawienie http_proxy, a nie nazwę użytkownika i hasło, zalecamy umieszczenie ustawień serwera proxy w lokalnym pliku nuget.config projektu i zatwierdzenie go do kontroli źródła. W ten sposób wszyscy członkowie zespołu otrzymają te same ustawienia.

Utwórz pusty plik. \ Nuget.config

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

Następnie:

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

Na koniec zatwierdź nowy lokalny plik Nuget.config nowego projektu.

8DH
źródło
1

W systemie Windows Server 2016 Standard, na którym rozwijam, po prostu musiałem otworzyć panel sterowania Credential Manager i wyczyścić buforowane ustawienia proxy dla programu Visual Studio, które nie były już ważne, a następnie ponownie uruchomić program Visual Studio. Następnym razem, gdy otworzyłem Menedżera pakietów Nuget, zostałem poproszony o podanie poświadczeń serwera proxy, co sprawiło, że znów działałem.

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

jayint32
źródło
1
Pomogło mi, gdy otrzymałem błędy 407 dla wewnętrznego repozytorium korporacyjnego.
thudbutt
0

Spróbuj tego . Zasadniczo połączenie może się nie powieść, jeśli system nie ufa certyfikatowi NuGet.

Ivan Danilov
źródło
0

Oprócz sugestii z @arcain musiałem dodać następujący adres URL Windows Azure Content Delivery Network do białej listy naszego serwera proxy:

.msecnd.net
mithun_daa
źródło
0

Powyższe rozwiązanie autorstwa @arcain Plus Poniższe kroki rozwiązały problem

  1. Modyfikacja „źródeł pakietów” w ustawieniach menedżera pakietów NuGet w celu zaznaczenia pola wyboru umożliwiającego korzystanie z ustawień NuGet.org rozwiązała mój problem.

  2. Zmieniłem również, aby używać tego (nuget.org) jako pierwszego wyboru źródła pakietów. Odznacziłem źródła pakietów
    mojej firmy, aby upewnić się, że nuget był zawsze pobierany ze źródeł globalnych.

Baran
źródło