supprimer la restauration du package nuget de la solution

148

J'ai ajouté la fonctionnalité de restauration de package nuget récente à une solution en utilisant 'Enable NuGet Package Restore': http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

Cependant, cela a cassé mon serveur de build et je n'ai pas eu le temps de le réparer, alors j'ai voulu le supprimer. Il n'y a pas d'option pour cela pour autant que je sache, j'ai donc supprimé manuellement la ligne suivante de tous mes fichiers * .csproj:

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

Le problème maintenant est que chaque fois que mes fichiers * .csproj sont extraits ou ouverts ma solution, la ligne est automatiquement ajoutée à nouveau, cassant ma construction si je l'archive accidentellement :(

Des idées comment je peux le supprimer définitivement?

MISE À JOUR: malgré la réponse ci-dessous, il revient toujours lors de l'ouverture de la solution, quelqu'un a le même problème?

Wiebe Tijsma
la source
2
Ne pouvez-vous pas simplement restaurer l'ensemble de modifications dans le contrôle de code source?
Betty le
Eh bien, c'était un ensemble de modifications assez important, mais grâce à votre commentaire, j'ai jeté un coup d'œil, et il semble qu'il a également ajouté un dossier .nuget dans le chemin de la solution, supprimé également pour voir si cela résout le problème
Wiebe Tijsma
Avez-vous réussi à réparer le serveur de build? (et est-ce teamcity?), parce que la ligne de projet d'importation que vous citez ci-dessus est ce qui cause l'échec de mes builds teamcity
Baldy
@Baldy Non, nous utilisons TFS Build et je n'ai pas vraiment cherché de solution, je l'ai simplement supprimée (
je prévois
3
J'ai créé un problème pour que l'équipe NuGet résolve ce problème. Veuillez voter sur nuget.codeplex.com/workitem/3756
deadlydog

Réponses:

214

Je n'avais pas l'air très bien, il y a une autre propriété ajoutée aux fichiers du projet:

<RestorePackages>true</RestorePackages>

Il suffit de supprimer ceci ainsi que toutes ces lignes manuellement de tous les fichiers * .csproj:

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

METTRE À JOUR:

Il s'avère que c'est un petit bugger persistant, si vous éditez manuellement vos fichiers de projet, assurez-vous de fermer la solution et de supprimer toutes les lignes du projet à la fois , sinon elles sont simplement ajoutées une fois le projet rechargé ...

UPDATE2:

Supprimez également le dossier .nuget de la racine de la solution

MISE À JOUR3:

Une version ultérieure de NuGet ajoute une autre section que vous devez supprimer:

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

Mise à jour4

À l'intérieur du NuGet.Targetssitué dans le .nugetdossier, il y a une autre section qui est ajoutée aux nouveaux projets ... changez-la sur false.

<!-- We need to ensure packages are restored prior to assembly resolve -->
<BuildDependsOn Condition="$(RestorePackages) == 'false'">
    RestorePackages;
    $(BuildDependsOn);
</BuildDependsOn>
Wiebe Tijsma
la source
7
J'ai trouvé qu'il y a aussi un <Import Project="$(SolutionDir)\.nuget\nuget.targets" />à la fin du fichier .csproj qui doit être supprimé manuellement.
TimDog
6
HA! recule lentement :)
TimDog
5
Cette chose me tourmente aussi. Si vos projets sont dans de nombreuses solutions différentes, la fonction de restauration de package pose des tas de problèmes.
Damian
7
"Assurez-vous de fermer la solution" est en fait d'une importance clé ici, car VS2010 semble mettre en cache les fichiers csproj / msbuild (sans prendre certaines modifications). Je n'ai pas remarqué ce comportement dans VS2012, mais cela m'a beaucoup tourmenté lors de la modification de ces fichiers dans VisualStudio.
Xavier Decoster
4
J'ai créé un problème pour que l'équipe NuGet résolve ce problème. Veuillez voter sur nuget.codeplex.com/workitem/3756
deadlydog
48

Pour désactiver la restauration de packages Nuget:

  1. Supprimer le dossier .nuget
  2. Supprimer des lignes spécifiques de tous les fichiers .csproj

Lignes à supprimer:

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

Remarque: assurez-vous de faire toutes les modifications en une seule fois avant de recharger la solution, sinon elle les rajoutera.

Ceci est basé sur l'article suivant: http://bartwullems.blogspot.no/2012/08/disable-nuget-package-restore.html

Vous pouvez également vérifier que cette option est désactivée: http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

angularsen
la source
J'ai créé un problème pour que l'équipe NuGet résolve ce problème. Veuillez voter sur nuget.codeplex.com/workitem/3756
deadlydog
1
Merci, pour moi, c'était simplement désactiver cette option
Maarten Kieft
J'ai utilisé l'outil IFix avec beaucoup de succès pour nettoyer les dépôts avec de nombreux projets. Il automatise essentiellement ces étapes. visualstudiogallery.msdn.microsoft.com
...
Le dossier .nuget est masqué et vous devez le supprimer du répertoire non seulement du projet.
Erik Bergstedt
8

N'est-ce pas ce paramètre ici?

Options ... -> Nuget Package Manager -> [décocher] Autoriser Nuget à télécharger les packages manquants

entrez la description de l'image ici

J'utilise Visual Studio Professional + Resharper 8.2

orad
la source
J'ai supprimé le dossier des packages et effacé le cache du package pour résoudre mon problème. Merci!
Tresto
1
Non, il ne met pas à jour les fichiers .proj après - donc le problème revient - mais bon de le faire ici aussi :-)
schmoopy
La fenêtre de sortie le montre lors de la construction: 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.'c'est juste une confirmation que cela devrait être la voie à suivre.
Moslem Ben Dhaou
1
Ceci n'est pas lié à la restauration de packages Nuget. Les anciennes versions de VS avaient un élément de menu contextuel pour les projets intitulé «Activer la restauration de paquet Nuget» qui créerait un .nuget/dossier et modifierait votre .csprojpour référencer un .targetsfichier. Vous étiez censé le confier nuget.exeà votre VCS (eww, la résolution du problème que Nuget résout!) Et la laideur comme ça. De nos jours, msbuild /restoreexiste et la restauration du package intégré de VS. L'OP demande comment supprimer l'ancienne et mauvaise façon de faire les choses, et non comment désactiver la prise en charge correcte de la restauration de paquet intégrée de VS.
binki
5

Les solutions qui utilisent actuellement la restauration de package intégrée à MSBuild peuvent être migrées vers la restauration automatique de package. D'après ce que je comprends, cela devrait aider ceux qui rencontrent des problèmes de construction de CI. (Veuillez me corriger si je me trompe).

Veuillez consulter le document sur le site Web nuget: Migration des solutions MSBuild-Integrated pour utiliser la restauration automatique des packages à l' adresse http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore

Il y a des informations là-bas pour la conversion avec et sans TFS.

David Ebbo a également publié des informations sur http://blog.davidebbo.com/2014/01/the-right-way-to-restore-nuget-packages.html

James Bradt
la source
3

NuGet a publié un article de blog sur la migration vers la restauration automatique des packages: http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore

Il existe un script PowerShell référencé dans le billet de blog qui se chargera de supprimer les lignes nécessaires automatiquement (et récursivement): https://github.com/owen2/AutomaticPackageRestoreMigrationScript/blob/master/migrateToAutomaticPackageRestore.ps1

Offrir directement une option de désactivation de la restauration du package NuGet est marqué comme Ne résoudra pas: https://nuget.codeplex.com/workitem/1883

Nitine Agarwal
la source
2

J'ai suivi la solution acceptée en vain en utilisant 2012. Cela a fonctionné cependant,

  1. Fermez complètement le VS
  2. Mettre <RestorePackages>true</RestorePackages>à jour le vers <RestorePackages>false</RestorePackages>et supprimer la <Import Project="$(SolutionDir)\.nuget\nuget.targets" />ligne
  3. Également renommé nuget.exeennuget.exe.NotExe
Daryl
la source
2

Pour tous ceux qui ont encore besoin de nettoyer un projet à l'aide de l'ancienne restauration de package NuGet, l'outil IFix disponible ici automatise le processus.

Exécutez simplement le programme d'installation ( IFixsera ajouté à PATH), puis exécutez ce qui suit:

IFix nugetrestore --fix

Vous pouvez d'abord l'exécuter en mode vérification pour voir ce qu'il va nettoyer:

IFix nugetrestore --check
Simon Fox
la source
1

J'ai eu le même problème. Ce que j'ai fini par faire: 1) aller dans chaque fichier .csproj du projet dans la solution, l'ouvrir dans le bloc-notes, puis supprimer la partie du xml et l'enregistrer.

2) Ensuite, j'ai supprimé tous les fichiers package.config de toute la solution.

3) Ensuite, j'ai dû supprimer les dossiers .nuget et package.

À ce stade, j'avais une solution entièrement gratuite de NuGet.

4) Ensuite, j'ai référencé manuellement toutes les DLL nécessaires et j'ai appuyé sur la compilation et la solution a fonctionné comme un champion sans que les packages NuGet soient nécessaires.

Andy30acre
la source
1

Accédez au répertoire de votre solution où vous avez un [$(SolutionDir)\.nuget\nuget.targets] .nugetdossier et un nuget.targetsfichier en dessous, supprimez le dossier et modifiez les lignes de suppression de votre csproj pour la dernière fois.

Le problème ne reviendra plus vous déranger.

Arvind
la source
1

Supprimez le fichier packages.config dans votre solution.

Latence
la source
0

J'ai accidentellement activé cette option de «restauration de package» lors de l'ouverture de mon projet dans VS2012 RC et j'ai commencé à recevoir des erreurs qui ressemblaient à:

"Erreur 1 Impossible de localiser 'C: \ FolderX \ SomeProject.nuget \ nuget.exe'"

Pour corriger l'erreur, j'ai suivi les instructions ci-dessus, ouvert ouvert chaque fichier de projet dans le bloc-notes et supprimé cette ligne RestorePackage.

Dmitry Lyalin
la source
0

J'ai pu résoudre ce problème en suivant ces étapes:

1) Assurez-vous de faire une sauvegarde de toutes les modifications de fichiers actuellement extraits.

2) supprimez physiquement le dossier de solution de votre C: \ (chemin qui est mappé à TFS).

3) Obtenez la dernière version de TFS pour votre solution.

4) copiez (le cas échéant) vos modifications à partir de la sauvegarde que vous avez effectuée à l'étape 1.

J'espère que cela pourra aider !

Rajesh
la source
-2

J'ai rencontré exactement le même problème et j'ai essayé de supprimer toutes les balises .nuget et RestorePackage des fichiers du projet, mais un projet ne se rechargerait tout simplement pas, peu importe à quel point je l'ai examiné minutieusement pour les balises .nuget et RestorePackages. Je suppose qu'il y a des références cachées à cela quelque part.

En fin de compte, il était plus facile de simplement copier les fichiers et de créer un nouveau projet et de l'importer dans la solution.

Peter
la source
-8

Nuget est nul. Supprimez simplement les nugets et supprimez ou commentez les éléments du package de packages.config dans le répertoire racine des projets où cela pose un problème. Utilisez plutôt des références directes dans un dossier lib.

<?xml version="1.0" encoding="utf-8"?>
  <packages>
    <!--<package id="EntityFramework" version="6.0.2" targetFramework="net45" />-->
  </packages>
Igor N
la source
Cela «craint», comme tout autre produit, si vous ne savez pas comment l'utiliser et ne faites pas d'efforts pour le comprendre.
Wiebe Tijsma
C'est bien sûr, mais à mon avis, le coup de coude ne vous donne pas suffisamment de contrôle sur votre projet. L'interface graphique Nuget a également besoin de mises à niveau sérieuses. 1. Ce n'est pas intuitif, 2. Il est difficile de gérer le package 3. Il est difficile de désactiver la restauration 4. Télécharge les packages inutiles 5. Parfois, il n'est pas en mesure de restaurer les pacakges
Igor N
Je suis d'accord dans une certaine mesure, même si je pense qu'il vaut vraiment mieux ne pas avoir de gestionnaire de paquets. On dirait qu'ils travaillent sur les mises à niveau sérieuses de l'interface graphique pour nuget 3.0: blog.nuget.org/20141112/nuget-3.0-preview.html
Wiebe Tijsma