Nuget Automatische Wiederherstellung für WebSite

8

Ich versuche, alle meine C # -Projekte in die neue automatische Nuget-Wiederherstellung zu migrieren, indem ich dieses Tutorial befolge: Migrieren von MSBuild-Integrated-Lösungen zur Verwendung der automatischen Paketwiederherstellung

Ich habe es erfolgreich zu meinen Desktop / Bibliotheken-Projekten gemacht, die ich .csproj Dateien bearbeiten musste, diese Zeilen daraus entfernend (ich benutze nicht TFS):

%Vor%

WebSites scheinen jedoch keine .csproj oder irgendeine andere Datei zu haben, die diese Anweisungen enthält. Wenn ich ein Paket installiere, platziere es erfolgreich die .dll in meinem Paket-Ordner, aber es wird auch in den bin-Ordner gelegt. Wenn ich die DLL unter / bin im Projektmappen-Explorer auswähle, hat sie folgende Eigenschaften:

%Vor%

Dies ist standardmäßig eingestellt, wenn ich ein Paket zum ersten Mal von nuget installiere. Ich denke, es sollte nicht in bin-Ordner suchen, oder wenn ich das Projekt erstelle, sollte es die DLL in den Ordner bin, wenn es nicht existiert. Das Problem ist, wenn ich das Projekt ohne die DLL in bin erstellen, gibt es mir den folgenden Fehler: "Der Typ oder Namespace-Name 'Newtonsoft' konnte nicht gefunden werden (fehlt Ihnen eine Verwendungs-Richtlinie oder eine Assembly-Referenz?)". Bei Desktop- / Bibliotheksprojekten wird die DLL in den Ordner bin kopiert.

Ich habe eine andere Frage gelesen. Nuget unterstützt WebSite nicht, sondern Web-Anwendungen: NuGet-Paket Wiederherstellung für die Website , aber ich habe auch auf der Seite von Nuget gelesen, dass sie Kompatibilität mit ASP.NET-Websites hinzugefügt haben. Hier ist meine Frage: Mache ich etwas falsch? Oder sollte ich zur Webanwendung migrieren, weil sie überhaupt keine Websites unterstützt?

    
thiagossi 22.04.2015, 20:30
quelle

4 Antworten

2

Wenn Sie im Kontextmenü der rechten Maustaste auf die Lösung in Visual Studio auf "NuGet Package Restore aktivieren" klicken, wird eine Info-Meldung angezeigt, die besagt:

  

In Website-Projekte installierte Pakete werden nicht wiederhergestellt   bauen. Erwägen Sie, diese in Webanwendungsprojekte zu konvertieren   notwendig.

Allerdings gibt es einen Workaround, den ich ausprobiert habe. Berücksichtigen Sie die Situation, wenn Sie ein Klassenbibliotheksprojekt (DLL-Projekt) haben, auf das vom Website-Projekt verwiesen wird. Wenn beide Projekte dasselbe NuGet-Paket referenzieren, wird das DLL-Projekt zuerst gebaut, dann werden die Pakete korrekt wiederhergestellt. Nächster Schritt Wenn es um das Website-Projekt geht, ist das erforderliche Paket bereits vorhanden und seine DLLs werden entsprechend der Datei /Website/Bin/ in den Ordner *.refresh kopiert. Ergebnis - Der Lösungsaufbau wird erfolgreich abgeschlossen.

    
Alexei Matrosov 23.04.2015 13:26
quelle
2

Ich kann definitiv bestätigen, dass die automatische Wiederherstellungsfunktion von NuGet tatsächlich für Websiteprojekte unter VS mit der neuesten Version von NuGet funktioniert.

Stellen Sie sicher, dass:

  1. Sie verwenden NuGet 2.7 oder höher (Tools & gt; Erweiterungen und Updates & gt; Updates)
  2. Es gibt die Datei no .nuget \ NuGet.targets im Stammverzeichnis der Lösung
  3. Sie haben packages.config im Stammverzeichnis der Website mit allen Verweisen auf die Pakete (normalerweise von VS generiert, wenn Sie NuGet-Pakete hinzufügen)
  4. Visual Studio ist auf " Ermöglichen, dass NuGet fehlende Pakete herunterladen kann " und " In Build Studio automatisch nach fehlenden Paketen suchen" (siehe Optionen & gt; NuGet-Paket) Manager) - diese sind standardmäßig aktiviert (
  5. )

Hier, was ich als Build-Ausgabe sehe, wenn ein Paket für Website -Projekt fehlt.

%Vor%

Link, der die oben genannten Details beschreibt: Ссылка .

    
Eugene D. Gubenkov 24.05.2015 19:06
quelle
2

Ich habe auch das gleiche Problem, das in der obigen Frage beschrieben wurde. Ich habe mich gefragt, ob Sie herausgefunden haben, wie Sie eine Nuget-Wiederherstellung auf der Website ohne die Projektdatei durchführen können. Ich habe eine package.config in der Website.

Ich habe eine Menge verschiedener Dinge ausprobiert und der folgende Befehl hat mich näher an eine Auflösung gebracht, aber nicht ganz.

nuget stellt packages.config -PackagesDirectory .. \ packages

wieder her

Der obige Befehl stellt die Pakete wie erwartet in den Ordner .. \ packages zurück, aber ich kann nicht herausfinden, wie man die richtigen Baugruppen in den bin-Ordner der Website bringt.

    
Zooly57 17.12.2016 15:56
quelle
1

Hier ist die Lösung für dieses Problem und es funktioniert.

Wenn Sie über eine separate Business-Logik-Ebene verfügen, können Sie die nuget-Pakete in diesem Projekt installieren. Anschließend können Sie die Nuget-Wiederherstellung auf der Business-Logik-Ebene durchführen, bevor Sie auf der Website-Lösung msbuild ausführen. Wenn Sie msbuild für die Lösung ausführen, die die BLL und die WebSite enthält, werden alle referenzierten Assemblys ( einschließlich der nugget-wiederhergestellten dlls ) aus dem BLL-Projekt in den bin-Ordner der Website gezogen.

Hier ist eine Hack-Option, wenn Sie keine separate Business-Logik-Schicht haben. Mit NuGet mit * .dll.refresh-Dateien in ASP.NET "Website" -Projekten mit Web-Bereitstellungsprojekten

    
Zooly57 23.04.2017 23:50
quelle