Я делаю некоторую архитектурную очистку, которая включает перемещение кучи классов в разные проекты и/или пространства имен. В настоящее время я перемещаю файлы вручную, создавая, а затем вручную добавляя с помощью операторов Foo по мере необходимости для устранения ошибок компиляции. Кто-нибудь знает более умный способ сделать это? (Мы магазин CodeRush и Refactor!, но мне было бы интересно узнать, поддерживает ли Resharper это)
Visual Studio: существует ли рефакторинг "переместить класс в другое пространство имен"?
Ответ 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 запросит целевое пространство имен.
'Изменить пространство имен на...' Рефакторинг предоставляется, когда текущее пространство имен файла не совпадает со структурой папок.
Это можно использовать для перемещения отдельных классов в другое пространство имен:
- создание желаемой структуры папок
- перемещение файла
- применение упомянутого рефакторинга (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++ ваш друг:
- Убедитесь, что в Visual Studio нет внесенных изменений для файлов, которые необходимо переместить в новое пространство имен
- Откройте все файлы, которые содержат пространство имен, которое необходимо изменить в Notepad++
- Открыть Find & Replace (CTRL + H)
- Заполните Найти что и Замените полями
- Нажмите Replace All in All Opened Documents
- Сохранить все изменения во всех документах (CTRL + SHIFT + S)
- Переключитесь на Visual Studio и перезагрузите все документы (Yes to all по запросу)
СДЕЛАННЫЙ