Ich habe ein Projekt auf einem Computer eingecheckt, auf einem anderen ausgecheckt und festgestellt, dass die von NuGet installierten Binärdateien fehlen. Ich könnte sie auch in die Quellcodeverwaltung einchecken, aber es sieht so aus, als gäbe es eine bessere Lösung:
http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages
Ich habe diese Anweisungen befolgt, habe jetzt einen .nuget
Ordner, in dem sich einer befinden sollte, und habe die folgenden Einträge in meiner .csproj-Datei:
<RestorePackages>true</RestorePackages>
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
und doch, wenn ich meine Lösung neu erstelle, werden die fehlenden Pakete nicht wiederhergestellt.
Was vermisse ich? Wie kann ich dieses Problem diagnostizieren?
Antworten:
Beachten Sie, dass Sie die Ausführung der Paketwiederherstellung erzwingen können, indem Sie die folgenden Befehle in der Nuget-Paketmanager-Konsole ausführen
Erzwingt die Neuinstallation von allem in der Lösung.
Erzwingt die Neuinstallation von allem im myProj-Projekt.
Hinweis : Dies ist die nukleare Option. Wenn Sie diesen Befehl verwenden, erhalten Sie möglicherweise nicht dieselben Versionen der von Ihnen installierten Pakete, was zu Problemen führen kann. Dies ist auf Projektebene weniger wahrscheinlich als auf Lösungsebene.
Mit der
-safe
Befehlszeilenparameteroption können Sie Upgrades auf neuere Versionen mit derselben Haupt- und Nebenversionskomponente beschränken. Diese Option wurde später hinzugefügt und behebt einige der in den Kommentaren genannten Probleme.quelle
Für andere, die über diesen Beitrag stolpern, lesen Sie dies.
NuGet 2.7+ führte uns in die automatische Paketwiederherstellung ein . Dies wird für die meisten Anwendungen als viel besserer Ansatz angesehen, da der MSBuild-Prozess nicht manipuliert wird. Weniger Kopfschmerzen.
Einige Links für den Einstieg:
quelle
Sie müssen eine der folgenden Möglichkeiten wählen:
Neuinstallation eines Pakets nach seinem Namen in allen Lösungsprojekten:
Neuinstallation eines Pakets anhand seines Namens und Ignorieren seiner Abhängigkeiten in allen Projekten der Lösung:
Neuinstallation eines Pakets anhand seines Namens in einem Projekt:
Neuinstallation aller Pakete in einem bestimmten Projekt:
Neuinstallation aller Pakete in einer Lösung:
quelle
Haben Sie den Paketwiederherstellungsmodus in dem Projekt aktiviert, in dem die Pakete / Binärdateien fehlen? Es ist ein Problem bekannt, bei dem die Pakete korrekt installiert sein müssen, wenn der Wiederherstellungsmodus aktiviert wird:
http://nuget.codeplex.com/workitem/1879
Der ursprüngliche Link ist tot. Dies könnte ein Ersatz sein: https://github.com/NuGet/Home/issues/1968
quelle
VS 2017
Extras> NuGet Package Manager> Package Manager-Einstellungen> Allgemein Klicken Sie auf "Alle NuGet-Caches löschen".
quelle
Ich bin in zwei Szenarien auf dieses Problem gestoßen.
Erstens, wenn ich versuche, meine Lösung über die Befehlszeile mit msbuild.exe zu erstellen. Zweitens, wenn ich versuche, das sln und die enthaltenen Projekte auf meinem Build-Server mit TFS und CI zu erstellen.
Ich erhalte Fehler, die behaupten, dass Referenzen fehlen. Wenn ich sowohl mein lokales Build-Verzeichnis als auch das des TFS-Servers überprüfe, sehe ich, dass der Ordner / packages nicht erstellt wird und die Nuget-Pakete nicht kopiert werden. Befolgen Sie die Anweisungen in Alexandres Antwort http://nuget.codeplex.com/workitem/1879 hat auch bei mir nicht funktioniert.
Ich habe die Wiederherstellung von Paketen über VS2010 aktiviert und festgestellt, dass Builds nur innerhalb von VS2010 funktionieren. Auch hier schlägt die Verwendung von msbuild fehl. Meine Problemumgehung ist wahrscheinlich völlig ungültig, aber für meine Umgebung funktionierte alles über einen lokalen Befehlszeilen-Build sowie über einen CI-Build in TFS.
Ich ging in. \ Nuget und änderte diese Zeile in der Datei .nuget \ NuGet.targets:
von:
zu: (beachten Sie, ohne die Anführungszeichen um die Variablen)
Ich verstehe, dass wenn meine Verzeichnisse Leerzeichen enthalten, dies fehlschlägt, aber ich habe keine Leerzeichen in meinen Verzeichnissen, und diese Problemumgehung hat dazu geführt, dass meine Builds erfolgreich abgeschlossen wurden ... vorerst.
Ich werde sagen, dass das Aktivieren der Protokollierung auf Diagnoseebene in Ihrem Build dazu beiträgt, zu zeigen, welche Befehle von msbuild ausgeführt werden. Dies hat mich dazu gebracht, die Zieldatei vorübergehend zu hacken.
quelle
Wenn etwas anderes nicht funktioniert hat, versuchen Sie:
Hat für mich gearbeitet und es ist einfach zu versuchen.
quelle
Wenn keine der anderen Antworten für Sie funktioniert, versuchen Sie Folgendes, was das einzige war, was für mich funktioniert hat:
Finde deinen
.csproj
Datei und bearbeiten Sie sie in einem Texteditor.Finden Sie das
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
Tag in Ihrem.csproj
Datei und löschen Sie den gesamten Block.Installieren Sie alle Pakete in der Lösung erneut:
Danach sollten Ihre Nuget-Pakete wiederhergestellt werden. Ich denke, dies ist ein Randfall, der nur auftritt, wenn Sie Ihr Projekt an einen anderen Ort verschieben.
quelle
Nur für andere, bei denen dieses Problem auftreten könnte, konnte ich das Problem beheben, indem ich Visual Studio schloss und das Projekt erneut öffnete. Beim Laden des Projekts wurden die Pakete während der Initialisierungsphase wiederhergestellt.
quelle
Für mich hatte ich ein leeres Tag NuGetPackageImportStamp in .csproj
Es sollte idealerweise eine gültige GUID enthalten.
Das Entfernen des oben genannten Tags und dann "Restore Nugets" funktionierte für mich.
quelle
Manchmal passiert etwas Seltsames und die automatische Wiederherstellung mit Visual Studio funktioniert nicht. In diesem Fall können Sie die NuGet Package Manager-Konsole verwenden. Dies wird in Visual Studio über Tools -> NuGet Package Manager -> Package Manager Console geöffnet . Die Befehle in der Konsole sind einfach. Wenn Sie beim Eingeben eines Befehls Hilfe zum Kontext erhalten möchten, drücken Sie einfach die Taste. Sie erhalten dann alle Optionen, die mit den eingegebenen Buchstaben beginnen. Wenn also kein Paket installiert ist, z. B. log4net, geben Sie den folgenden Befehl ein:
Install-Package log4net
Sie können noch viel mehr tun, z. B. die zu installierende Version angeben, ein Paket aktualisieren, ein Paket deinstallieren usw.
Ich musste die Konsole benutzen, um mir zu helfen, wenn Visual Studio sich wie ein Verrückter verhielt.
quelle
Die automatische Paketwiederherstellung schlägt aus einem der folgenden Gründe fehl:
Der folgende Artikel beschreibt ausführlicher, wie Sie mit den Punkten 1-3 umgehen: https://docs.nuget.org/consume/package-restore/migrating-to-automatic-package-restore
quelle
Ich hatte NuGet-Pakete kaputt, nachdem ich eine Systemwiederherstellung auf meinem System durchgeführt und es ungefähr zwei Tage lang gesichert hatte. (Die NuGet-Pakete wurden inzwischen installiert.) Um dies zu beheben, musste ich in meinem Benutzerprofil zum Ordner .nuget \ packages gehen, die Pakete suchen und löschen. Nur dann würde Visual Studio die Pakete frisch herunterziehen und sie ordnungsgemäß als Referenzen hinzufügen.
quelle
Die beste Problemumgehung, die ich gefunden habe, um ein neues Projekt von Grund auf neu zu erstellen und dann alle Quelldateien mit dem Code zu importieren. Mein Projekt war nicht so kompliziert, so dass ich von dort aus kein Problem hatte.
quelle
Keine der anderen Lösungen hat in meiner Situation funktioniert:
AspNetCore-Abhängigkeiten wurden installiert / deinstalliert und wurden zwischengespeichert. 'AspNetCore.All' würde sich weigern, ordnungsgemäß zu aktualisieren / neu zu installieren / zu entfernen. Und unabhängig davon, was ich getan habe, wurden die zwischengespeicherten Abhängigkeiten verwendet (mit denen es nicht kompatibel war), da es sich um eine höhere Version handelte.
PackageReference
bin
,obj
OrdnerTools > Nuget Package Manager > Package Manager Settings
und gehenClear all Nuget caches
. Überprüfen Sie die Konsole, da einige Elemente möglicherweise nicht entfernt werden können. Kopieren Sie den Ordnerpfad und beenden Sie Visual Studio.Wenn dies immer noch nicht funktioniert, wiederholen Sie den
nuget
Vorgang, durchsuchen Sie aber auch Ihr Laufwerk im Windows Explorer und löschen Sie alles, was nach Cache aussieht.quelle
vs2015 kein Problem beim Aktivieren der Nuget-Wiederherstellung. Meine Lösung:
Ordner .nuget hinzufügen, Datei NuGet.Config und NuGet.targets im Verzeichnis .nuget hinzufügen
Jede Projektdatei add: build
quelle
Wenn der Fehler, mit dem Sie konfrontiert sind, darin besteht, dass keine Verbindung zum Remote-Server hergestellt werden kann, wie es bei mir der Fall war, ist es von Vorteil, wenn Sie diese Prüfung zusätzlich zu den in den obigen Kommentaren angegebenen Prüfungen durchführen lassen.
Ich habe gesehen, dass es 2 NUGET-Paketquellen gibt, von denen die Pakete heruntergeladen werden können (unter Tools-> Nuget Package Manager-> Packager Manager-Einstellungen). Eine der Paketquellen funktionierte nicht und Nuget versuchte, nur von dieser Quelle herunterzuladen.
Die Dinge passten zusammen, als ich die Paketquelle zum Herunterladen von https://www.nuget.org/api/v2/ EXPLICTLY in den Einstellungen änderte
quelle
In meinem Fall hatte ein abgebrochener Nuget-Wiederherstellungsversuch eine der
packages.config
Dateien in der Lösung beschädigt . Ich habe dies nicht entdeckt, bevor ich meinen Git-Arbeitsbaum überprüft habe. Nach dem Zurücksetzen der Änderungen in der Datei funktionierte die Nuget-Wiederherstellung wieder.quelle
Es gibt eine Verknüpfung, mit der die Nuget-Wiederherstellung funktioniert. 1. Stellen Sie sicher, dass die Internetverbindung oder die Nuget-URLs im Optionsmenü von VS Tools korrekt sind. 2. Sehen Sie sich den .nuget- oder Nuget-Ordner in der Lösung an
LÖSCHEN Sie Paketordner, falls vorhanden
Öffnen Sie die Paketmanagerkonsole und führen Sie diesen Befehl aus
quelle
Klicken Sie in VS2017 mit der rechten Maustaste auf die Lösung => Befehlszeile öffnen => Entwicklerbefehlszeile.
Sobald das geöffnet ist, geben Sie ein (und drücken Sie die Eingabetaste danach).
Dadurch werden alle Pakete wiederhergestellt, und Sie erhalten eine schöne Konsolenausgabe dessen, was getan wurde ...
quelle