Какой лучший способ сделать массовое пространство имен переименовывается в большое приложение С#?
Сначала немного фона.
В настоящее время пространства имен и сборки в нашей кодовой базе (~ 60 сборок, тысячи классов) выглядят как
WidgetCompany.Department.Something
Теперь мы были выделены таким образом, что мы продаем программное обеспечение, которое управляет WidgetCompany, поэтому мы хотели бы переименовать пространства имен и сборки
NewCompany.Something
В нормальных условиях я, вероятно, просто придерживаюсь старого пространства имен, но проблема заключается в том, что наши клиенты не хотят видеть имя одного из своих конкурентов в любом месте приложения. В случае, если они видят трассировку стека, свойства сборки и т.д., Она не должна отображаться. Это не должно скрывать наших партнеров или делать что-то зловещее, нам просто нужно убедиться, что люди знают, что мы являемся отдельным сущностью, отдельным управлением, и им не нужно беспокоиться о совместном использовании данных и т.д.
Теперь вопрос. Каков наилучший способ выполнения этого типа переименования?
Необходимо изменить следующее:
- Пространство имен для (почти) каждого класса в
приложение
- Каждый оператор
using
в приложении, который ссылается на старые имена
- Структура папок для каждого проекта
- Ссылки между проектами, которые зависят от измененной структуры папок
- .Sln файлы, которые ссылаются на структуру измененных папок.
- Любые ссылки на
те классы, которые полностью
(должно быть мало и далеко
между)
- Любые ссылки на эти
классы в xml конфигурационных файлах (config
разделы и т.д.)
- Файлы AssemblyInfo.cs для каждой сборки
- AssemblyName в каждом файле .csproj
Я придерживался стратегии find-replace-pray или там что-то лучше?
Ответы
Ответ 1
Щелкните правой кнопкой мыши на своем текущем пространстве имен и выберите "Рефакторинг" → "Переименовать" и измените имя в появившемся всплывающем окне через некоторое время. Введите новое имя и нажмите "ОК".
Если у вас есть несколько глубин для вашего пространства имен, Visual Studio не позволит вам ввести точку. Однако, если вы скопируете и вставьте точку, несмотря на предупреждение, она будет заниматься бизнесом.
Ответ 2
ReSharper. Получите версию 5.1 от JetBrains бесплатно в течение 30 дней (более чем достаточно времени для переименования). Поместите курсор на пространство имен, которое вы хотите изменить, и дважды нажмите Ctrl-R (ReSharper Rename). Он будет работать с пространством имен на любом количестве уровней глубоко и преобразует любое использование этого пространства имен в новое. Тем не менее, вам нужно будет изменить каждое уникальное пространство имен в своем решении (если только вы не зайдете с Find/Replace)
Ответ 3
Во-первых, я бы попробовал вариант Refactor->Rename
. Но, как упоминалось в комментарии к другим ответам, это не работает так хорошо (или я не нашел, как заставить его работать). Поэтому я предпочитаю использовать следующий сценарий, особенно если вы хотите добавить какое-то дополнительное пространство имен.
1) Переименуйте корневое пространство имен (WidgetCompany
) на что-то вроде NAMESPACE_TO_BE_REPLACED
с помощью Refactor-Rename
2) Замените NAMESPACE_TO_BE_REPLACED
своим конечным пространством имен (NewCompany.WidgetSoftware
), используя диалог find-n-replace
И не забудьте переименовать проекты, пространства имен по умолчанию и т.д.
Ответ 4
Если у вас есть ReSharper:
-
Щелкните правой кнопкой мыши проект, Свойства. Изменить пространство имен по умолчанию на желаемое
Пространство имен.
-
Щелкните правой кнопкой мыши проект Рефакторинг → Настроить пространство имен, чтобы обновить все
пространства имен для использования пространства имен по умолчанию
Тогда просто дайте ему сделать свою магию.
Ответ 5
- Откройте случайный класс в [WidgetCompany.Department.Something]
- Изменить- > Найти и заменить- > заменить в файлах
- Введите "WidgetCompany.Department.Something" в области FindWhat.
- Введите "NewCompany.Something" в "Заменить область"
- Выберите текущий проект в области просмотра.
- Заменить все
Ответ 6
Visual Studio 2019 Community Edition поддерживает это, как описано здесь. Он работает для любой иерархии (с точками, изменениями корневого пространства имен и т.д.) И корректно обновляет все зависимости.
Поместите курсор в имя класса
Нажмите Ctrl+., чтобы вызвать меню "Быстрые действия и рефакторинг"
Выберите Переместить в пространство имен ![Move to namespace refactoring]()
.В открывшемся диалоговом окне выберите целевое пространство имен, которое вы хотите переместить, на
.