2016-03-03 21 views
7

Mein Job hat ein privates NuGet-Repo. Ich kann Pakete von ihm und von nuget.org installieren. Ich stehe auf Probleme, wenn ein Paket im privaten Repo gespeichert ist, das von einem auf nuget.org gehosteten Paket abhängig ist.Installieren des NuGet-Pakets mit Abhängigkeiten von mehreren Quellen

Zum Beispiel hostet mein privates Repo ein Paket, P1. P1 hat eine Abhängigkeit von P2, die auf nuget.org gehostet wird. Wenn ein "install-package P1" mit meinem privaten Repo als Quelle gesetzt wird, bekomme ich eine Fehlermeldung, dass es die Abhängigkeit P2 nicht finden konnte. Dies ist sinnvoll, da P2 im privaten Repo nach P2 sucht, aber auf nuget.org gehostet wird. Bis jetzt wurde die Problemumgehung durch Installieren von P2 von nuget.org und anschließendes Installieren von P1 aus dem privaten Repo gelöst. Während das technisch funktioniert, ist es mühsam und wird den Verkauf von NuGet an den Rest des Teams schwierig machen.

Kann ich install-Paket mit mehreren Quellen trotzdem ausführen? Ich habe versucht, eine Liste in den Parameter --Quelle zu übergeben aber

Die NuGet.config wird von Visual Studio verwaltet, damit alle Änderungen, die ich daran mache, jedes Mal gelöscht werden, wenn ein nuget-Befehl ausgeführt wird Visual Studio Ich habe versucht, eine zusätzliche nuget.config-Datei auf der Lösungsebene hinzuzufügen, aber soweit ich das beurteilen kann, wurde sie ignoriert. Ich habe mehrere Heimsuchungen des Befehls install = Paket versucht, aber sie sehen in der Regel etwas wie folgt aus:

Install-Package P1 -Source https://api.nuget.org/v3/index.json,http://privatefeed.com 

Als Referenz ist hier die NuGet.config-Datei, aber es ändert scheint aussichtslos.

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <packageRestore> 
    <add key="enabled" value="True" /> 
    <add key="automatic" value="True" /> 
    </packageRestore> 
    <packageSources> 
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" /> 
    <add key="Private Nuget" value="http://privatefeed.com" /> 
    </packageSources> 
    <disabledPackageSources> 
    <add key="Microsoft and .NET" value="true" /> 
    </disabledPackageSources> 
    <activePackageSource> 
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" /> 
    </activePackageSource> 
</configuration> 
+0

Können Sie uns zeigen, die Befehlszeile Sie verwendet haben? Und was ist in Ihrem nuget.config – Petrik

+0

Sicher, siehe die Änderungen oben. –

+0

Danke für die Ergänzungen. Ich habe das gerade auf meinem Rechner getestet und es funktioniert dort gut. Ich kann ein Paket von meinem lokalen Feed (auf meinem Rechner) holen und habe Abhängigkeiten von nuget.org. Die nächste Frage wäre also, was passiert, wenn Sie nuget.exe (die Befehlszeilenversion) ausführen. z.B. tun nuget.exe installieren p1 und sehen, ob es alle Pakete ergreift. Welche Versionen von nuget und VS hast du? – Petrik

Antwort

1

Mit NuGet.exe, können Sie die Option -Source wiederholen, um mehrere Paketquellen angeben.

Beispiel:

nuget install P1 -Source https://api.nuget.org/v3/index.json -Source http://privatefeed.com 

Es scheint, dass es unmöglich ist, mehrere Quellen mit dem Paket angeben Console verwalten (Powershell). Wenn jedoch kein -Source angegeben ist, wird eine NuGet.Config-Datei verwendet. Die Konfigurationsdatei kann mehrere Paketquellen haben und die Datei selbst kann mit einem Team geteilt werden.

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <packageSources> 
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" /> 
    <add key="Private Nuget" value="http://privatefeed.com" /> 
    </packageSources> 
</configuration> 

Speicher unter NuGet.Config im selben Verzeichnis wie die Lösung und fügen sie die Kontrolle auf Version.

Beachten Sie, dass Sie Visual Studio möglicherweise neu laden müssen, damit die Konfigurationsänderungen wirksam werden.

Jetzt können Sie Pakete installieren, ohne -Source zu konfigurieren.

Beispiel:

Install-Package P1