Entfernen Sie die Nuget-Paketwiederherstellung aus der Lösung

148

Ich habe die neueste Funktion zur Wiederherstellung von Nuget-Paketen zu einer Lösung hinzugefügt, die "NuGet-Paketwiederherstellung aktivieren" verwendet: http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

Allerdings hat es meinen Build-Server kaputt gemacht und ich hatte nicht die Zeit, es zu reparieren, also wollte ich es entfernen. Soweit ich weiß, gibt es dafür keine Option, daher habe ich die folgende Zeile manuell aus allen meinen * .csproj-Dateien entfernt:

<Import Project="$(SolutionDir)\.nuget\nuget.targets" />

Das Problem ist jetzt, dass jedes Mal, wenn meine * .csproj-Dateien ausgecheckt oder meine Lösung geöffnet werden, die Zeile automatisch wieder hinzugefügt wird und mein Build unterbrochen wird, wenn ich sie versehentlich einchecke :(

Irgendwelche Ideen, wie ich es dauerhaft entfernen kann?

UPDATE: Trotz der Antwort unten kommt es beim Öffnen der Lösung immer wieder zurück, jemand mit dem gleichen Problem?

Wiebe Tijsma
quelle
2
Können Sie das Änderungsset in der Quellcodeverwaltung nicht einfach zurücksetzen?
Betty
Nun, es war ein ziemlich großer Änderungssatz, aber dank Ihres Kommentars habe ich einen Blick darauf geworfen, und es scheint, dass er auch einen .nuget-Ordner im Lösungspfad hinzugefügt hat, der ebenfalls gelöscht wurde, um zu sehen, ob das Problem
behoben ist
Haben Sie es geschafft, den Build-Server zu reparieren? (und ist es Teamcity?), weil die Import-Projektzeile, die Sie oben zitieren, dazu führt, dass meine Teamcity-Builds fehlschlagen
Baldy
@Baldy Nein, wir verwenden TFS Build und ich habe nicht wirklich nach einer Lösung gesucht, sondern sie einfach entfernt (ich plane immer noch, später darauf
einzugehen
3
Ich habe ein Problem für das NuGet-Team erstellt, um dieses Problem zu beheben. Bitte stimmen Sie es unter nuget.codeplex.com/workitem/3756 ab
tödlicher Hund

Antworten:

214

Ich sah nicht sehr gut aus, es gibt eine weitere Eigenschaft, die den Projektdateien hinzugefügt wurde:

<RestorePackages>true</RestorePackages>

Sie müssen nur diese und alle diese Zeilen manuell aus allen * .csproj-Dateien entfernen:

  <Import Project="$(SolutionDir)\.nuget\nuget.targets" />

AKTUALISIEREN:

Es stellt sich heraus, dass es ein hartnäckiger kleiner Mist ist. Wenn Sie Ihre Projektdateien manuell bearbeiten, stellen Sie sicher, dass Sie die Lösung schließen und alle Zeilen gleichzeitig aus dem Projekt löschen. Andernfalls werden sie nur erneut hinzugefügt, sobald das Projekt neu geladen wird.

UPDATE2:

Löschen Sie auch den Ordner .nuget aus dem Lösungsstamm

UPDATE3:

Eine spätere Version von NuGet fügt einen weiteren Abschnitt hinzu, den Sie entfernen müssen:

 <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>

Update4

Innerhalb der NuGet.Targetsin der Lage .nugetOrdner gibt es einen weiteren Abschnitt, der für neue Projekte hinzugefügt wird ... es falsch wechseln.

<!-- We need to ensure packages are restored prior to assembly resolve -->
<BuildDependsOn Condition="$(RestorePackages) == 'false'">
    RestorePackages;
    $(BuildDependsOn);
</BuildDependsOn>
Wiebe Tijsma
quelle
7
Ich habe festgestellt, dass sich <Import Project="$(SolutionDir)\.nuget\nuget.targets" />am Ende der .csproj-Datei auch eine befindet, die manuell entfernt werden muss.
TimDog
6
HA!
zieht
5
Dieses Ding hat mich auch geplagt. Wenn Ihre Projekte in vielen verschiedenen Lösungen vorliegen, verursacht die Paketwiederherstellungsfunktion eine Vielzahl von Problemen.
Damian
7
"Stellen Sie sicher, dass Sie die Lösung schließen" ist hier tatsächlich von zentraler Bedeutung, da VS2010 csproj / msbuild-Dateien zwischenzuspeichern scheint (ohne bestimmte Änderungen zu übernehmen). Ich habe dieses Verhalten in VS2012 nicht bemerkt, aber das hat mich beim Ändern dieser Dateien in VisualStudio sehr geplagt.
Xavier Decoster
4
Ich habe ein Problem für das NuGet-Team erstellt, um dieses Problem zu beheben. Bitte stimmen Sie es unter nuget.codeplex.com/workitem/3756 ab
tödlicher Hund
48

So deaktivieren Sie die Wiederherstellung von Nuget-Paketen:

  1. Löschen Sie den .nuget-Ordner
  2. Entfernen Sie bestimmte Zeilen aus allen .csproj-Dateien

Zu entfernende Linien:

<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
<RestorePackages>true</RestorePackages>

Hinweis: Stellen Sie sicher, dass Sie alle Änderungen auf einmal vornehmen, bevor Sie die Lösung neu laden. Andernfalls werden sie wieder hinzugefügt.

Dies basiert auf dem folgenden Artikel: http://bartwullems.blogspot.no/2012/08/disable-nuget-package-restore.html

Möglicherweise möchten Sie auch überprüfen, ob diese Option deaktiviert ist: http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

Angularsen
quelle
Ich habe ein Problem für das NuGet-Team erstellt, um dieses Problem zu beheben. Bitte stimmen Sie es unter nuget.codeplex.com/workitem/3756 ab
tödlicher Hund
1
Danke, für mich war es nur diese Option zu deaktivieren
Maarten Kieft
Ich habe das IFix-Tool mit großem Erfolg bei der Bereinigung von Repos bei vielen Projekten verwendet. Grundsätzlich werden diese Schritte automatisiert. Visualstudiogallery.msdn.microsoft.com/…
Angularsen
Der .nuget-Ordner ist ausgeblendet und muss nicht nur aus dem Projekt , sondern auch aus dem Verzeichnis entfernt werden .
Erik Bergstedt
8

Ist es nicht diese Einstellung hier?

Optionen ... -> Nuget Package Manager -> [Deaktivieren] Ermöglichen Sie Nuget, fehlende Pakete herunterzuladen

Geben Sie hier die Bildbeschreibung ein

Ich verwende Visual Studio Professional + Resharper 8.2

orad
quelle
Ich habe den Paketordner gelöscht und den Paketcache geleert, um mein Problem zu beheben. Vielen Dank!
Tresto
1
Nein, es aktualisiert die .proj-Dateien nicht danach - also kehrt das Problem zurück - aber es ist auch gut, es hier zu tun :-)
schmoopy
Das Ausgabefenster zeigt dies beim Erstellen: 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.'Es ist nur eine Bestätigung, dass dies der richtige Weg sein sollte.
Moslem Ben Dhaou
1
Dies hat nichts mit der Wiederherstellung von Nuget-Paketen zu tun. In alten Versionen von VS gab es einen Kontextmenüpunkt für Projekte mit dem Titel "Nuget Package Restore aktivieren", mit dem ein .nuget/Ordner erstellt und Ihr Ordner so geändert werden konnte.csproj , dass er auf eine .targetsDatei verweist . Sie sollten das nuget.exeauf Ihr VCS übertragen (eww, das Problem lösen, das Nuget löst!) Und solche Hässlichkeit. Heutzutage msbuild /restoreexistiert und VS das integrierte Paket wiederherstellen. Das OP fragt, wie die alte, schlechte Vorgehensweise entfernt werden kann und nicht, wie die korrekte Unterstützung für die integrierte Paketwiederherstellung von VS deaktiviert werden soll.
Binki
5

Lösungen, die derzeit die MSBuild-integrierte Paketwiederherstellung verwenden, können auf die automatische Paketwiederherstellung migriert werden. Soweit ich weiß, sollte dies denjenigen helfen, die auf CI-Build-Probleme stoßen. (Bitte korrigieren Sie mich, wenn ich mich irre).

Weitere Informationen finden Sie im Dokument auf der Nuget-Website: Migrieren von MSBuild-integrierten Lösungen zur Verwendung der automatischen Paketwiederherstellung unter http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore

Dort gibt es Informationen zum Konvertieren mit und ohne TFS.

David Ebbo hat auch einige Informationen unter http://blog.davidebbo.com/2014/01/the-right-way-to-restore-nuget-packages.html veröffentlicht

James Bradt
quelle
3

NuGet hat einen Blogbeitrag über die Migration zur automatischen Paketwiederherstellung: http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore

In dem Blog-Beitrag wird auf ein Powershell- Skript verwiesen, mit dem die erforderlichen Zeilen automatisch (und rekursiv) entfernt werden: https://github.com/owen2/AutomaticPackageRestoreMigrationScript/blob/master/migrateToAutomaticPackageRestore.ps1

Das direkte Anbieten einer Option zum Deaktivieren der NuGet-Paketwiederherstellung wird als nicht behoben markiert: https://nuget.codeplex.com/workitem/1883

Nitin Agarwal
quelle
2

Ich folgte der akzeptierten Lösung ohne Erfolg mit 2012. Dies funktionierte jedoch,

  1. Schließen Sie den VS vollständig
  2. Aktualisieren Sie die <RestorePackages>true</RestorePackages>auf <RestorePackages>false</RestorePackages>und löschen Sie die <Import Project="$(SolutionDir)\.nuget\nuget.targets" />Zeile
  3. Auch umbenannt nuget.exeinnuget.exe.NotExe
Daryl
quelle
2

Für alle, die noch ein Projekt mit der alten NuGet-Paketwiederherstellung bereinigen müssen, automatisiert das hier verfügbare IFix-Tool den Prozess.

Führen Sie einfach das Installationsprogramm aus ( IFixwird hinzugefügt PATH) und führen Sie dann Folgendes aus:

IFix nugetrestore --fix

Sie können es zuerst im Überprüfungsmodus ausführen, um zu sehen, was bereinigt wird:

IFix nugetrestore --check
Simon Fox
quelle
1

Ich hatte das gleiche Problem. Was ich letztendlich getan habe: 1) Gehen Sie in jede Projekt-Csproj-Datei in der Lösung, öffnen Sie sie im Editor, entfernen Sie den Teil der XML und speichern Sie sie.

2) Dann habe ich alle package.config-Dateien in der gesamten Lösung entfernt.

3) Dann musste ich die Ordner .nuget und package entfernen.

Zu diesem Zeitpunkt hatte ich eine vollständig NuGet-freie Lösung.

4) Dann habe ich manuell auf alle benötigten DLLs verwiesen und auf Kompilieren geklickt, und die Lösung lief wie ein Champion, ohne dass die NuGet-Pakete benötigt wurden.

Andy30acre
quelle
1

Wechseln Sie in Ihr Lösungsverzeichnis, in dem sich [$(SolutionDir)\.nuget\nuget.targets] .nugetOrdner und nuget.targetsDatei befinden, löschen Sie den Ordner und ändern Sie die Zeilen zum Entfernen aus Ihrem csproj ein letztes Mal .

Das Problem wird nicht wieder auftreten, um Sie zu nerven.

arvind
quelle
1

Entfernen Sie die Datei packages.config in Ihrer Lösung.

Latenz
quelle
0

Ich habe diese Option "Paketwiederherstellung" versehentlich beim Öffnen meines Projekts in VS2012 RC aktiviert und Fehler festgestellt, die ungefähr so ​​aussahen:

"Fehler 1 'C: \ FolderX \ SomeProject.nuget \ nuget.exe' konnte nicht gefunden werden"

Um den Fehler zu beheben, habe ich die obigen Anweisungen befolgt, jede Projektdatei im Editor geöffnet und diese RestorePackage-Zeile entfernt.

Dmitry Lyalin
quelle
0

Ich konnte dieses Problem durch folgende Schritte beheben:

1) Stellen Sie sicher, dass Sie eine Sicherungskopie aller Änderungen Ihrer aktuell ausgecheckten Dateien erstellen.

2) Löschen Sie den Lösungsordner physisch aus Ihrem C: \ (Pfad, der TFS zugeordnet ist).

3) Holen Sie sich das Neueste von TFS für Ihre Lösung.

4) Kopieren Sie (falls vorhanden) Ihre Änderungen aus dem Backup, das Sie in Schritt 1 erstellt haben.

hoffentlich hilft das !

Rajesh
quelle
-2

Ich bin auf genau das gleiche Problem gestoßen und habe versucht, alle .nuget- und RestorePackage-Tags aus den Projektdateien zu entfernen, aber ein Projekt wurde einfach nicht neu geladen, egal wie gründlich ich es auf .nuget- und RestorePackages-Tags untersucht habe. Ich denke, irgendwo gibt es einige versteckte Hinweise darauf.

Am Ende war es einfacher, die Dateien zu kopieren, ein neues Projekt zu erstellen und es in die Lösung zu importieren.

Peter
quelle
-8

Nuget saugt. Entfernen Sie einfach Nugets und entfernen oder kommentieren Sie Paketelemente aus der Datei packages.config im Stammverzeichnis der Projekte, bei denen dies ein Problem darstellt. Verwenden Sie stattdessen direkte Verweise in einen lib-Ordner.

<?xml version="1.0" encoding="utf-8"?>
  <packages>
    <!--<package id="EntityFramework" version="6.0.2" targetFramework="net45" />-->
  </packages>
Igor N.
quelle
Es ist wie jedes andere Produkt zum Kotzen, wenn Sie nicht wissen, wie man es verwendet, und sich nicht bemühen, es zu verstehen.
Wiebe Tijsma
Das ist sicher, aber meiner Meinung nach gibt Ihnen Nudged nicht genug Kontrolle über Ihr Projekt. Auch die Nuget-GUI benötigt einige ernsthafte Upgrades. 1. Es ist nicht intuitiv, 2. Sein hartes , um das Paket zu verwalten 3. Sein hartes 4. Downloads nicht benötigten Pakete deaktivieren wiederherstellen 5. Manchmal ist es nicht in der Lage Pacakges wiederherzustellen
Igor N
Ich stimme bis zu einem gewissen Grad zu, obwohl ich denke, dass es wirklich besser ist, überhaupt keinen Paketmanager zu haben. Scheint, als würden sie an den ernsthaften GUI-Upgrades für Nuget 3.0 arbeiten: blog.nuget.org/20141112/nuget-3.0-preview.html
Wiebe Tijsma