2014-07-13 12 views
10

Ich habe einen privaten NuGet-Paket-Feed ausgeführt, mit dem ich bestimmte Funktionen und Erweiterungen zwischen meinen Projekten freigeben kann. Es funktioniert gut in Visual Studio, aber in letzter Zeit habe ich damit begonnen, eine Continuous Integration Build für eines meiner Projekte in Visual Studio Online zu erstellen, und es scheint, dass VSO meinen privaten Feed nicht sehen kann.Hinzufügen von privaten Nuget-Paket-Feeds zu Visual Studio Online

Ich benutze die neue Methode der Paketwiederherstellung - die eine, die das Ankreuzfeld "Erlaube NuGet fehlende Pakete herunterladen" in den VS-Optionen enthält. Ich bin nicht mit der Option "NuGet Package Restore aktivieren" im Kontextmenü der Lösung, denn das ist eigentlich the old way of doing it und verursacht Probleme an anderer Stelle.

Ich mache auch nichts, das meine Projektdateien ändert; Ich verwende eine benutzerdefinierte Build-Definition (mit den XAML-Workflow-Funktionen), sodass ich sie auf jedes meiner Projekte anwenden kann, indem ich sie einfach aus dem Dropdown-Menü "Build-Prozessvorlage" unter dem Build-Definition-Editor auswähle. Ich mache es auf diese Weise, weil ich eine Reihe anderer Schritte hinzufüge, einschließlich einiger Post-Build-Skripte, um die automatisierte Bereitstellung auf einem Hosting-Server zu erleichtern. Einige dieser Schritte sind ein wenig komplex. Wenn Sie sie also im Build-Prozess halten, muss ich sie nur einmal einrichten.

Also, ohne die alte Kontextmenü-Lösung zu verwenden, die nuget.exe in den Lösungsordner legt, und ohne mit dem Projekt selbst zu verwirren, wie bekomme ich VSO Build, um Pakete aus meinem privaten Feed wiederherzustellen?

Die Build-Workflow-Vorlage hat eine Aktivität "NuGetRestore", die Befehlszeilenargumente übernehmen kann. Ich habe hinzugefügt, die folgende:

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

aber das scheint keinen Unterschied zu machen. Diese Aktivität hat auch ein Feld, "um die Lösungen anzugeben, die ihre NuGet-Pakete wiederherstellen müssen", und ich habe das nur auf die Variable ProjectsToBuild gesetzt, die gesetzt wird, wenn Sie den Build definieren. Ich bekomme keine Fehlermeldung von nuget.exe (zumindest keine, die ich sehen kann), aber der Build schlägt fehl. Interessanterweise heißt es, dass die relevanten Namespaces nicht existieren und nicht, dass die Referenzen nicht aufgelöst werden können. Irgendwelche Ideen?

+0

Ich habe auch bemerkt Ihre Syntax auf Befehl falsch war. nuget restore -source "https://www.nuget.org/api/v2;https://www.myget.org/F/nuget". Ihre Quellen müssen durch ein Semikolon getrennt sein. Dies und mein Konfigurationsbeispiel sollten dies beheben. https://docs.nuget.org/consume/command-line-reference#restore-command – Jared

Antwort

3

Ich glaube, was Sie tun müssen, ist eine Lösung NuGet.config Datei hinzufügen. Die NuGet-Konfigurationsdateien sind ähnlich wie web.config verkettet. Sie können Dokumentation here

NuGet erste Lasten NuGet.config aus dem Standardverzeichnis finden, dann jede Datei lädt namens NuGet.config von der Wurzel des aktuellen Laufwerks beginnt und im aktuellen Verzeichnis endet.

Es wird etwas Ähnliches wie folgt aussehen:

<?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> 
Verwandte Themen