2014-07-13 33 views
10

Mam uruchomiony prywatny pakiet pakietów NuGet, którego używam do udostępniania pewnych funkcji i rozszerzeń między moimi projektami. Działa świetnie w Visual Studio, ale ostatnio rozpocząłem konfigurowanie ciągłej integracji dla jednego z moich projektów w Visual Studio Online i wydaje się, że VSO nie może zobaczyć mojego prywatnego kanału.Dodawanie prywatnych przesyłek pakietów Nuget do Visual Studio Online

Używam nowej metody przywracania pakietów - tej, która wymaga ustawienia opcji "Zezwalaj na pobieranie brakujących pakietów" w opcjach VS. Jestem nie używając opcji "Włącz pakiet NuGet Restore" w menu kontekstowym rozwiązania, ponieważ jest to w rzeczywistości the old way of doing it i powoduje problemy w innych miejscach.

Nie robię też niczego, co modyfikuje moje pliki projektu; Używam niestandardowej definicji kompilacji (używając elementów XAML Workflow), aby móc ją zastosować do dowolnego z moich projektów, wybierając ją z menu rozwijanego "Szablon procesu kompilacji" w edytorze definicji wersji. Robię to w ten sposób, ponieważ dodaję wiele innych kroków, w tym niektóre skrypty post-build, aby ułatwić automatyczne wdrażanie na serwerze hostingowym; niektóre z tych kroków są trochę skomplikowane, więc utrzymanie ich w procesie kompilacji oznacza, że ​​muszę je skonfigurować tylko raz.

Więc, bez użycia starego rozwiązania menu kontekstowego, które umieszcza nuget.exe w folderze rozwiązania, i bez zadzierania z samym projektem, jak mogę uzyskać kompilację VSO, aby przywrócić pakiety z mojego prywatnego kanału?

Szablon przepływu pracy budowania ma działanie "NuGetRestore", które może przyjmować argumenty linii poleceń. Dodałem następujące:

"-source https://www.nuget.org/api/v2/ http://www.example.com/nuget" 

, ale to nie ma znaczenia. To działanie ma również pole do "określania rozwiązań, które wymagają przywrócenia pakietów NuGet", i właśnie ustawiłem to na zmienną ProjectsToBuild, która jest ustawiana podczas definiowania kompilacji. Nie dostaję żadnych błędów z nuget.exe (przynajmniej żaden nie widzę), ale kompilacja się nie powiedzie. Co ciekawe, mówi, że odpowiednie przestrzenie nazw nie istnieją, a nie, że odniesienia nie mogą zostać rozwiązane. Jakieś pomysły?

+0

Zauważyłem również na własną składnię poleceń myliłem. nuget restore -source "https://www.nuget.org/api/v2;https://www.myget.org/F/nuget". Twoje źródła muszą być oddzielone średnikiem. Ten i mój przykład konfiguracji powinien rozwiązać ten problem. https://docs.nuget.org/consume/command-line-reference#restore-command – Jared

Odpowiedz

3

Uważam, że należy dodać plik NuGet.config na poziomie rozwiązania. Pliki konfiguracyjne NuGet są powiązane podobnie jak web.config. Można znaleźć dokumentację here

Nuget pierwsze ładunki NuGet.config z domyślnej lokalizacji, a następnie wczytuje dowolny plik o nazwie NuGet.config począwszy od korzenia bieżącym dysku i kończący się w bieżącym katalogu.

To będzie wyglądać podobnie do tego:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <packageRestore> 
     <!-- Allow NuGet to download missing packages --> 
     <add key="enabled" value="True" /> 
     <!-- Automatically check for missing packages during build in Visual Studio --> 
     <add key="automatic" value="True" /> 
    </packageRestore> 
    <packageSources> 
     <add key="nuget.org" value="https://www.nuget.org/api/v2/" /> 
     <add key="PrivateNugetName" value="http://your.nuget.server.com/nuget" /> 
    </packageSources> 
    <disabledPackageSources /> 
    <activePackageSource> 
     <add key="All" value="(Aggregate source)" /> 
    </activePackageSource> 
</configuration>