web-dev-qa-db-fra.com

Visual Studio: Existe-t-il une refactorisation "Déplacer la classe vers un autre espace de noms"?

Je fais un nettoyage architectural qui implique de déplacer un tas de classes dans différents projets et/ou espaces de noms. Actuellement, je déplace les fichiers à la main, en construisant, puis en ajoutant manuellement des instructions en utilisant Foo pour résoudre les erreurs de compilation. Quelqu'un connaît-il une façon plus intelligente de procéder? (Nous sommes une boutique CodeRush et Refactor!, Mais je serais intéressé de savoir si Resharper a un support pour cela)

62

Resharper est le seul outil que je connaisse de ce qui a cette capacité. Il y a aussi beaucoup d'autres fonctionnalités qui manquent dans CodeRush et Refactor!

28
Josh

Visual Studio 2010 a la possibilité de renommer un espace de noms. Placez le curseur sur le nom de l'espace de noms et appuyez sur F2. Ou renommez-le simplement dans le code et appuyez sur Shift+Alt+F10Enter après avoir vu le gribouillis rouge apparaître.

Reharper peut également renommer les espaces de noms . Citation:

Le Renommage de l'espace de noms permet aux utilisateurs de renommer un espace de noms spécifique et de corriger automatiquement toutes les références à l'espace de noms dans le code. Les utilisations suivantes sont renommées:

  • Instructions d'espace de noms
  • Utilisation de directives
  • Noms qualifiés des types
34
Darin Dimitrov

Cette réponse s'applique à au moins Visual Studio 2013 et 2015 sans aucun resharper requis

  1. Déplacer les fichiers de classe vers un nouveau dossier
  2. Ouvrez 'Rechercher et remplacer'
  3. Sélectionnez "Remplacer dans les fichiers"
  4. Tapez la définition d'origine de l'espace de noms dans le champ "Rechercher quoi", par exemple. MyCorp.AppStuff.Api
  5. Tapez la nouvelle définition d'espace de noms dans le champ 'Remplacer par' par exemple. MyCorp.AppStuff.Api.Extensions
  6. Sélectionnez le nouveau dossier à l'aide du bouton de navigation du champ 'Rechercher dans' ...ou saisissez le chemin du dossier
  7. Appuyez sur la Replace All bouton
8
Gusdor

Visual Studio 2019 propose au moins 2 options intégrées:

'Déplacer vers l'espace de noms ...' le refactoring peut être déclenché sur n'importe quelle classe, et VS demandera l'espace de noms cible.

'Changer l'espace de noms en ...' le refactoring est fourni lorsque l'espace de noms du fichier actuel ne correspond pas à la structure du dossier.

Cela peut être utilisé pour déplacer des classes individuelles vers un autre espace de noms en:

  1. créer la structure de dossiers souhaitée
  2. déplacer le fichier
  3. appliquer le refactoring mentionné (CTRL +. avec le curseur sur l'espace de noms)

Ces opérations garantissent que toutes les références sont mises à jour en conséquence.

6
gschuager

Il existe des solutions partielles pour VS 2015 et VS 2017 sans Resharper en utilisant des extensions gratuites.

Une extension que j'aime aujourd'hui (fin 2017) est le Fix Namespace VS Extension: https://marketplace.visualstudio.com/ items? itemName = vs-publisher-599079.FixNamespace # overview

Il analyse la structure des dossiers de votre solution et propose une refactorisation des espaces de noms à l'aide de cela. Malheureusement, ce n'est pas parfait: il ne suit pas très bien les dépendances, mais a résolu la part du lion du travail pour moi.

3
Ádám Miklósi

Avec Resharper: CTRL+R+O

Appuyez ensuite deux fois sur la flèche vers le bas pour sélectionner Déplacer le type vers un autre espace de noms.

2
Marco Lackovic

Depuis que la réponse ci-dessus a été fournie (je suppose), cette fonctionnalité a été ajoutée à CodeRush. Placez simplement le carat sur le Type à déplacer et vous verrez une option Move Type to Namespace sur le Refactor! menu contextuel. Cela déplacera le type vers le nouvel espace de noms et mettra à jour les références. Vous souhaiterez peut-être toujours déplacer le fichier vers un dossier de solution qui correspond au nom de l'espace de noms.

1
nzduck

Ce n'est pas le meilleur résultat, mais cela peut être fait sans plugins ni outils, uniquement avec Visual Studio. Recherchez et remplacez dans Solution complète, Correspondance casse, Correspondance mot entier. Trouvez quoi: nom de classe, Remplacez par: New.Namespace.ClassName (nom de classe complet).

Si vous avez plus de 100 références de la classe déplacée et d'autres classes dans l'ancien espace de noms qui ne sont pas déplacées, c'est la seule solution infaillible et gratuite que j'ai trouvée. Le seul cas où cela conduit à des erreurs est lorsque vous avez le même nom de classe dans un autre espace de noms.

0
user3285954

Si vous ne pouvez pas ou ne voulez pas utiliser Re $ harper, Notepad ++ est votre ami:

  1. Assurez-vous que vous n'avez pas utilisé de modifications dans Visual Studio pour les fichiers dont vous avez besoin pour déplacer vers le nouvel espace de noms
  2. Tout ouvrir les fichiers qui contiennent l'espace de noms qui doit être modifié dans Notepad ++
  3. Ouvert Find & Replace (CTRL + H)
  4. Remplissez les champs Rechercher et remplacer par
  5. Presse Replace All in All Opened Documents
  6. Enregistrer tout modifications dans tous les documents (CTRL + MAJ + S)
  7. Basculez vers Visual Studio et rechargez tous les documents (Yes to all à l'invite)

TERMINÉ

0
Sergio