web-dev-qa-db-fra.com

Corriger une fois pour toutes les packages et références NuGet

Windows 8.1 Enterprise x64, Visual Studio 2015, MVC 5, EF 6, VS Online en utilisant git

Je suis un développeur relativement nouveau avec Visual Studio (environ neuf mois), et depuis que j'ai commencé, j'ai eu un moment incroyablement difficile avec les références et les packages NuGet. Toutes mes références fonctionnaient correctement vendredi lorsque j'ai éteint mon ordinateur pour le week-end. Je n'ai pas touché à l'ordinateur du tout le week-end, maintenant j'ai démarré aujourd'hui et j'ai une tonne d'erreurs de référence:

list of errors

(Il y a 6 262 erreurs au total, mais je ne peux évidemment pas faire une capture d'écran complète.)

Comme je l'ai dit, ce genre de problème se produit très souvent et c'est incroyablement frustrant. Ce que j'ai essayé:

  • Assurez-vous que toutes les références générant les erreurs sont référencées
  • Désinstallez/réinstallez les packages générant les erreurs dans NuGet
  • Supprimez complètement le contenu du dossier packages et laissez NuGet les restaurer (tous réinstallés, les vues ont les mêmes erreurs qu'auparavant)
  • Assurez-vous que chaque référence est définie sur Copy Local
  • Fermez la solution, supprimez tous les dossiers bin et obj, redémarrez l'ordinateur, nettoyez, reconstruisez
  • Assurez-vous que toutes les références nécessaires se trouvent dans le web.config Correspondant (à l'intérieur de Views ou à la racine)
  • Vérifiez l'option NuGet pour restaurer les packages manquants (n'apparaissait pas, tous les packages se trouvent dans mon dossier packages local)
  • D'autres choses sur SO que je suis sûr d'avoir oublié de lister ici

Je suis à bout de souffle avec ces packages et références. C'est une solution différente à chaque fois, et cette fois je ne peux pas le comprendre. Suis-je en train de manquer une solution évidente, quelque chose que j'ai oublié? Existe-t-il un moyen de prendre en quelque sorte une sauvegarde lorsque cela fonctionne et de la restaurer chaque fois que les choses se cassent? Toute idée, que ce soit pour aider avec le problème actuel ou pour résoudre le problème sous-jacent, serait très appréciée.

Remarque supplémentaire

Le problème n'est PAS seulement avec les vues - les contrôleurs génèrent également des erreurs. Plus précisément:

Le type ou le nom de l'espace de noms 'Controller' est introuvable (manque-t-il une directive using ou une référence d'assembly?)

(Il dit littéralement Controller, ce n'est pas quelque chose que j'ai changé pour la confidentialité ou autre chose.)

Celles-ci sont levées malgré le fait que j'ai des instructions using pour tous les espaces de noms nécessaires. Les instructions using elles-mêmes fonctionnent correctement, mais l'erreur est renvoyée dans le code. La correction automatique suggérée consiste à tout référencer manuellement: par exemple, var sb = new StringBuilder(); veut que je change la ligne en var sb = new System.Text.StringBuilder();. Tester ce correctif ne résout pas le problème, la même erreur est renvoyée mais sur System au lieu de StringBuilder.

Informations supplémentaires demandées

  • J'utilise git avec VS Team Services (mais les packages sont ignorés avec .gitignore).
  • Moi et une autre personne travaillons sur cela, mais l'autre personne ne l'a pas touché du tout (même pas tiré du repo à distance) depuis plusieurs semaines.
  • Les références dans le fichier .csproj Sont au format ..\..\..\packages\ (Correct pour l'emplacement par rapport au fichier .csproj).
  • Cibler .NET 4.6 (l'a toujours été, ce n'est pas nouveau)
  • Toutes les références sont résolues, aucun point d'exclamation dans la liste des références.
21
vaindil

De nouveaux projets

Il y a une seule chose que vous devez faire pour que les packages fonctionnent correctement avec git:

Lorsque vous créez un référentiel, assurez-vous d'ajouter un .gitignore adapté au développement de Visual Studio. Vous pouvez rechercher un tel fichier sur Google ou le retirer de ici .

Cela vous assurera de ne rien commettre qui pourrait causer des problèmes plus tard.

Cela devrait résoudre de nombreux problèmes qui se produisent généralement lorsque vous archivez des packages dans un référentiel de code. Vous pouvez ajouter/supprimer des packages et mettre à niveau des packages et également être en mesure de cloner le référentiel sur une nouvelle machine et les packages seront restaurés automatiquement.

Projets existants

C'est bon pour les nouveaux projets. Si vous avez déjà un projet avec un gros désordre, il est très difficile de le réparer car Visual Studio conserve les versions des packages à plusieurs endroits - packages.config et app.config (et web.config le cas échéant).

Option 1 - Fixer le projet en cours

Vous pouvez supprimer tous les packages (supprimer toutes les références de tous les projets et supprimer le contenu du package).

Assurez-vous que les packages n'apparaissent plus dans aucun fichier (par exemple packages.config ou app.config). Ajoutez maintenant le .gitignore puis recommencez à ajouter les packages.

Option 2 - Créer un nouveau projet

Si cela ne fonctionne pas, démarrez un nouveau projet, ajoutez le .gitignore, transférez tout le code (uniquement votre code) et installez les packages.

5
daramasala

Je ne suis pas très familier avec le fonctionnement de Git dans VS, mais je me souviens une fois récemment lors de l'utilisation de TFS qui a dissocié la solution du contrôle de code source, réparé tous les packages, nettoyé et reconstruit avant de le lier à nouveau résolu un tas de problèmes concernant NuGet les références.

Je m'excuse si Git fonctionne différemment dans VS.

2
Varuuna