2014-04-18 17 views
21

Ich habe ein Visual Studio 2013-Projekt, das Nuget verwendet. Ich habe eine packages.config-Datei im Stammverzeichnis der Lösung und definiere die Nuget-Pakete, die wir installieren wollen. Ich habe auch eine nuget.config-Datei im Stammverzeichnis der Lösung, die packageSources sowie einige packageSourceCredentials definiert. Eine der Paketquellen ist ein privates Repo für unser Unternehmen.Visual Studio 2013 ignoriert nuget.config

Wenn ich eine Eingabeaufforderung in diesem Stammverzeichnis der Lösung öffnen und nuget restore eingeben, funktioniert es gut und ist in der Lage, unsere privaten Repos zu treffen, um einige der benutzerdefinierten Pakete, die wir verwenden, zu ziehen.

Wenn ich jedoch die Lösung in Visual Studio 2013 öffne und sie erstelle, schlägt sie beim Herunterladen unserer benutzerdefinierten Pakete fehl, weil sie anscheinend unsere Datei nuget.config ignoriert und daher nichts über unser privates nuget-Repo weiß .

Ich könnte in Extras> Optionen gehen und unser privates Repo hinzufügen, aber wir versuchen, alles innerhalb der Lösung selbst zu machen, so dass es Out-of-the-Box ohne benutzerdefinierte Konfiguration benötigt.

Warum wird nuget.config von VS 2013 ignoriert?

+3

Ich nehme an, Sie wissen bereits, dass Nuget in dieser Reihenfolge nach seinen NuGet.config-Dateien sucht: 1. .nuget \ nuget.config 2. geht rekursiv von diesem Projektordner zum Stammverzeichnis. 3. Die globale NuGet.config, die erwartet wird, um% appdata% \ NuGet \ nuget.config sein Letzteres ist Ihre Maschine-weite (pro Benutzer) Datei, in Benutzer \ {Benutzername} \ Roaming und das ist die Datei, die ausgeführt wird, wenn Sie in Visual Studio in Extras> Optionen gehen und Ihr privates Repo hinzufügen. Auf diese Weise können Sie auf PowerShell oder was auch immer zugreifen. – JamesWHurst

+0

@JamesWHurst Würdest du sagen, dass Visual Studio niemals die Informationen von nuget.config in meinem Projekt berücksichtigt, und stattdessen muss ich PowerShell verwenden, um die globale Datei nuget.config zu ändern, um den Repo stattdessen hinzuzufügen? –

+0

Funktioniert es, wenn Sie Ihre Datei nuget.config aus demselben Ordner wie die Lösung in einen Unterordner namens .nuget (also .nuget \ nuget.config) verschieben? –

Antwort

3

Ich habe ein neues Projekt mit der folgenden Verzeichnisstruktur erstellt.

-ConsoleApplication1 
    -ConsoleApplication1 
    -ConsoleApplication1.sln 
    -nuget.config 

Vor dem nuget.config zum Hinzufügen ich nicht von meiner privaten repos sehen konnte, wenn die Nuget Packages für Lösungs Feature verwalten verwenden. Als ich nuget.config hinzugefügt habe, konnte ich meine neuen Repos im Dialogfenster sehen. Ich bin auch in der Lage meiner Pakete wiederherstellen mit nuget wiederherstellen und aus einem Build innerhalb VS 2013

Meine nuget.config sieht aus wie diese

<?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://www.nuget.org/api/v2/" /> 
     <add key="MyRepo" value="http://XX.XX.XXX.XX:81/host/repo" /> 
    </packageSources> 
    <activePackageSource> 
     <add key="All" value="(Aggregate source)" /> 
    </activePackageSource> 
</configuration> 

Basierend auf Ihrem beschriebenes Problem das einzige, was ich denken kann, ist, dass Möglicherweise haben Sie zuvor versucht, die Nuget-Paketwiederherstellung von Ihrem Projekt zu deaktivieren, bevor Sie die aktuelle Methode zum Wiederherstellen von Paketen verwenden. Wenn Sie das Paket nicht von jedem Projekt gleichzeitig wiederherstellen, könnte eine Logik übrig bleiben, die die neue Methode stören könnte. Wenn Sie beispielsweise den Ordner .nuget aus Ihrer Projektmappe gelöscht haben, könnte die Datei nuget.config weiterhin darin enthalten sein und zu Konflikten führen.

+0

Wie würden Sie die Datei nuget.config in VS 2013 verwalten, wenn sie "über" Ihrem aktuellen Lösungsverzeichnis liegt? Können Sie Ihre Verzeichnisstruktur genauer beschreiben, wo sich Ihre Datei nuget.config befindet, in Bezug darauf, wo Sie .sln- und .csproj-Dateien sind? Und wie sieht Ihre Solution Explorer-Ansicht aus? Können Sie dann die Datei nuget.config sehen? –

+0

Das ergibt keinen Sinn. Warum sollte man nuget.config oberhalb des Lösungsverzeichnisses platzieren, wo es logischerweise für alle Lösungen gilt. Das kann nicht richtig sein ... – crush

+0

Ich glaube es macht völlig Sinn, es über deine Lösung zu stellen. Wir haben unsere Hauptlösungsdatei in der Wurzel unseres Stammes und unsere reguläre NuGet.config ist da drin. Allerdings haben wir auch eine separate/Devs/UserXxx-Ordnerstruktur unter Stamm, wo unsere Entwickler ihre eigenen Lösungen haben. Das Problem ist, dass diese Lösungen die Paketstandorte nicht respektieren. Auch unsere Lösung verwendet Projekte aus einem komplett anderen Repo, die ihren eigenen Paketordner haben sollten. NuGet lässt jedoch nicht zwei Paketstandorte von einer Lösung zu, so dass wir einen gemeinsamen "Paket" -Standort für alles erstellen müssen. – MarqueIV

0

Ist unter Ihrer Lösung Web-Projekt oder Web Application-Projekt? Ich denke, dass Website-Projekt nugget.config Datei ignorieren.

18

Starten Sie Visual Studio nach der Bearbeitung von NuGet.config neu!

Mir ist aufgefallen, dass VS2012 Änderungen an NuGet.config erst nach dem Neustart annimmt.

+0

Ich glaube, das war das Thema in meinem 2015 Projekt. Ich dachte, dass ich irgendwann neu gestartet habe und es immer noch nicht registriert wurde, aber nachdem es angefangen hat zu arbeiten, habe ich ein paar gründliche Tests durchgeführt und alles hat so funktioniert wie erwartet, solange ich VS neu gestartet habe. – JoeBrockhaus

1

Ich fand, dass wenn Sie eine Multi-Projekt-Lösung haben, mit den Projekten alle in Ordnern im Ordner Lösung, die NuGet.config in einem Projektordner nicht funktioniert. Es nimmt die private Paketquelle nicht auf. Es funktioniert funktioniert, wenn Sie eine NuGet.config in den Ordner Lösung platzieren.

Das heißt, diese nicht Arbeit:

  • Lösung
    • ProjectA
      • ProjectA.csproj
    • ProjectB
      • ProjectB.csproj
      • NuGet.config

während dieses tut Arbeit:

  • Lösung
    • ProjectA
      • ProjectA.csproj
    • ProjectB
      • ProjectB.csproj
    • NuGet.config

I auch gefunden th bei disableSourceControlIntegration Option funktioniert nicht, wenn in \NuGet.config angegeben. Es funktioniert nur, wenn in .nuget\NuGet.config. Also habe ich zwei Konfigurationsdateien für meine Lösung, eine am Stamm, die die Paketquellenkonfiguration enthält, und eine im Ordner .nuget mit der Option disableSourceControlIntegration.

Getestet mit Visual Studio 2012 Update 5 und NuGet Package Manager-Erweiterung 2.8.5.