8

Ich versuche, alle Projekte meine C#, um neue Nuget Automatische Wiederherstellung nach diesem Tutorial zu migrieren: Migrating MSBuild-Integrated solutions to use Automatic Package RestoreNuget Automatische für WebSite

Ich habe es erfolgreich getan zu meinem Desktop/Bibliotheken Projekte, die ich musste bearbeiten CSPROJ Dateien, diese Zeilen aus ihr zu entfernen (ich verwende TFS nicht):

<RestorePackages>true</RestorePackages> 
... 
<Import Project="$(SolutionDir)\.nuget\nuget.targets" /> 
... 
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> 
    <PropertyGroup> 
     <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> 
    </PropertyGroup> 
    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" /> 
</Target> 

jedoch WebSites scheinen keine CSPROJ oder jede andere Datei zu haben, diese Anweisungen enthalten. 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ählen, hat es die folgenden Eigenschaften:

Auto-refresh path: C:\mypackages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll 
File Name: Newtonsoft.Json.dll 
Full Path: C:\MyWebSite\Bin\Newtonsoft.Json.dll 

Dieser Standard ist gesetzt, wenn ich zum ersten Mal ein Paket von nuget installieren. Ich denke, es sollte nicht in bin Ordner suchen, oder wenn ich das Projekt erstellen, 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 lese in einer anderen Frage Nuget unterstützt nicht WebSite, sondern Web-Anwendungen stattdessen: NuGet Package restore for website, aber ich habe auch in Nuget-Seite gelesen, dass sie Kompatibilität mit ASP.NET-Websites hinzugefügt haben, so hier ist meine Frage: Bin ich etwas falsch machen? Oder sollte ich zur Webanwendung migrieren, weil sie überhaupt keine Websites unterstützt?

+0

WAP ist definitiv der Weg zu gehen. Websites sind viel begrenzter und haben nicht wirklich viele Vorteile, wenn Sie VS verwenden. Beachten Sie, dass mit der Veröffentlichung von ASP.NET 5 das Beste aus beiden Welten kombiniert wird. Ich habe NuGet mit Websites in der Vergangenheit verwendet, aber gut. – mason

Antwort

2

Wenn Sie auf „Aktivieren NuGet Paketwiederherstellung“ in der rechten Maustaste Kontextmenü in Visual Studio auf die Lösung Sie eine Info-Meldung angezeigt bekommen, die sagt:

Packages installed into Website projects will not be restored during build. Consider converting those into Web application projects necessary.

jedoch eine Abhilfe gibt habe ich versucht, ist, dass funktioniert. 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 in den Ordner /Website/Bin/ gemäß der Datei *.refresh kopiert. Ergebnis - Lösungsaufbau wird erfolgreich abgeschlossen.

2

Ich kann definitiv bestätigen, dass NuGet automatische Wiederherstellung Funktion tatsächlich funktioniert für Websites Projekte unter VS mit der neuesten Version von NuGet.

Stellen Sie sicher, dass:

  1. Sie verwenden NuGet 2.7 oder höher (Tools> Erweiterungen und Updates> Updates)
  2. Es gibt keine .nuget \ NuGet.targets Datei an der Lösung Wurzel
  3. Sie haben Pakete.Config in Web-Site root mit allen Verweisen auf die Pakete (normalerweise von VS erzeugt wird, wenn NuGet Paketen hinzugefügt)
  4. Visual Studio konfiguriert ist „zulassen NuGet fehlenden Pakete zum Download“ und "Automatisch nach Paketen während Build fehlt "in Visual Studio (siehe Optionen> NuGet Package Manager) - diese sind standardmäßig

Hier ist, was ich als die Build-Ausgabe zu sehen, wenn einige Pakete für Web Site Projekt fehlen.

Restoring NuGet packages... 
To prevent NuGet from restoring packages during build, open the Visual Studio Options dialog, click on the Package Manager node and uncheck 'Allow NuGet to download missing packages during build.' 
------ Build started: Project: WebSite1, Configuration: Debug Any CPU ------ 
Validating Web Site 
Building directory '/'. 

Validation Complete 
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ========== 

Link, der die oben genannten Details beschreibt: https://docs.nuget.org/consume/package-restore.

+0

Ich sehe, dass das Paket wiederhergestellt wird, aber die Skripts scheinen nicht mehr zum eigentlichen Website-Verzeichnis hinzugefügt zu werden. Siehst du sie wieder hinzugefügt werden? – GotDibbs

+0

@GodDibbs, welche Skripte meinst du? –

+0

Entschuldigung, ich habe gerade gemerkt, dass ich nicht generisch genug bin :). Wenn Sie beispielsweise das [react nuget-Paket] (https://www.nuget.org/packages/react.js/) in einem Website-Projekt installieren, entfernen Sie die Dateien und den Paketordner und versuchen Sie anschließend, Der Paketordner wird neu gefüllt, der Skriptordner auf der Website jedoch nicht. – GotDibbs

2

Ich habe auch das gleiche Problem in der obigen Frage beschrieben. 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 probierte eine Reihe von verschiedenen Dingen aus und der folgende Befehl brachte mich näher zu einer Auflösung, aber nicht ganz.

nuget wiederherstellen packages.config -PackagesDirectory .. \

Der obige Befehl Pakete die Pakete in das tut wiederherstellen .. \ Pakete Ordner wie erwartet, aber ich kann nicht herausfinden, wie man die richtigen Baugruppen, um in der bin-Ordner der Website.

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. Beim Ausführen von Msbuild für die Lösung, die die BLL und die WebSite enthält, werden alle referenzierten Assemblys (einschließlich der wiederhergestellten dlls) aus dem BLL-Projekt in den bin-Ordner der Website gezogen.

Hier ist eine Hack-Option, wenn Sie keine separate Business-Logik-Ebene haben. Using NuGet with *.dll.refresh files in ASP.NET "Web Site" projects with Web Deployment Projects

Verwandte Themen