Подтвердить что ты не робот

Visual Studio: существует ли рефакторинг "переместить класс в другое пространство имен"?

Я делаю некоторую архитектурную очистку, которая включает перемещение кучи классов в разные проекты и/или пространства имен. В настоящее время я перемещаю файлы вручную, создавая, а затем вручную добавляя с помощью операторов Foo по мере необходимости для устранения ошибок компиляции. Кто-нибудь знает более умный способ сделать это? (Мы магазин CodeRush и Refactor!, но мне было бы интересно узнать, поддерживает ли Resharper это)

4b9b3361

Ответ 1

Resharper - единственный инструмент, который я знаю о том, что имеет эту способность. Существует также множество других функций, которые отсутствуют в CodeRush и Refactor!

Ответ 2

Visual Studio 2010 имеет возможность переименовать пространство имен. Поместите курсор над именем пространства имен и нажмите F2. Или просто переименуйте его в код и нажмите Shift + Alt + F10, Enter после просмотра красной картинки.

Reharper также может переименовать пространства имен. Цитата:

Рефакторинг Переименовать пространство имен. позволяет пользователям переименовывать определенные пространства имен и автоматически исправить все ссылки на пространство имен в код. Следующие переименованы:

  • Операторы пространства имен
  • Использование директив
  • Квалифицированные имена типов

Ответ 3

Этот ответ применим, по крайней мере, к Visual Studio 2013 и 2015 без необходимости повторной настройки

  • Переместить файлы классов в новую папку
  • Откройте "Найти и заменить"
  • Выберите "Заменить в файлах"
  • Введите исходное определение пространства имен в поле "Найти что", например. MyCorp.AppStuff.Api
  • Введите новое определение пространства имен в поле "Заменить на", например. MyCorp.AppStuff.Api.Extensions
  • Выберите новую папку, используя кнопку обзора "Искать в поле" ... или введите путь к папке
  • Нажмите кнопку Replace All

Ответ 4

Visual Studio 2019 предоставляет как минимум 2 встроенных параметра:

"Переместить в пространство имен..." Рефакторинг может быть запущен для любого класса, и VS запросит целевое пространство имен.

'Изменить пространство имен на...' Рефакторинг предоставляется, когда текущее пространство имен файла не совпадает со структурой папок.

Это можно использовать для перемещения отдельных классов в другое пространство имен:

  1. создание желаемой структуры папок
  2. перемещение файла
  3. применение упомянутого рефакторинга (CTRL+. с курсором над пространством имен)

Эти операции гарантируют, что все ссылки обновляются соответственно.

Ответ 5

Есть частичные решения для VS 2015 и VS 2017 без Resharper с помощью бесплатных расширений.

Одно расширение, которое мне нравится сегодня (конец 2017 года), - это расширение Fix Namespace VS: https://marketplace.visualstudio.com/items?itemName=vs-publisher-599079.FixNamespace#overview

Он анализирует структуру папок вашего решения и предлагает рефакторинг пространства имен, используя это. К сожалению, он не идеален: он не отслеживает зависимости, которые хорошо, но решает левную долю работы для меня.

Ответ 6

С помощью Resharper: CTRL + R + O

Затем дважды нажмите клавишу со стрелкой вниз, чтобы выбрать "Переместить тип в другое пространство имен".

Ответ 7

Поскольку приведенный выше ответ был предоставлен (я предполагаю), эта функция была добавлена ​​в CodeRush. Просто поместите карат на тип, который нужно переместить, и вы увидите опцию Move Type to Namespace на Refactor! контекстное меню. Это переместит тип в новое пространство имен и обновит ссылки. Вы все равно можете переместить файл в папку решений, которая совпадает с именем пространства имен.

Ответ 8

Это не лучший результат, но может быть сделано без плагинов или инструментов, только с Visual Studio. Найти и заменить в полном решении, сопоставить регистр, сопоставить целое слово. Найдите что: имя класса, Замените на: New.Namespace.ClassName (полное имя класса).

Если у вас есть 100+ ссылки на перемещенный класс и другие классы в старом пространстве имен, то, что не перемещено, это единственное надежное и бесплатное решение, которое я нашел. Единственный случай, когда это приводит к ошибкам, - это когда у вас одно и то же имя класса в другом пространстве имен.

Ответ 9

Если вы не можете или не хотите использовать Re $ harper, Notepad++ ваш друг:

  1. Убедитесь, что в Visual Studio нет внесенных изменений для файлов, которые необходимо переместить в новое пространство имен
  2. Откройте все файлы, которые содержат пространство имен, которое необходимо изменить в Notepad++
  3. Открыть Find & Replace (CTRL + H)
  4. Заполните Найти что и Замените полями
  5. Нажмите Replace All in All Opened Documents
  6. Сохранить все изменения во всех документах (CTRL + SHIFT + S)
  7. Переключитесь на Visual Studio и перезагрузите все документы (Yes to all по запросу)

СДЕЛАННЫЙ