Какой лучший способ сделать массовое переименование пространства имен в большом приложении c #? - PullRequest
37 голосов
/ 26 января 2011

Сначала немного фона.

В настоящее время пространства имен и сборки в нашей кодовой базе (~ 60 сборок, тысячи классов) выглядят как

WidgetCompany.Department.Something

Теперь мы выделены таким образом, что продаем программное обеспечение, которое управляет WidgetCompany, поэтому мы хотели бы переименовать пространства имен и сборки

NewCompany.Something

В обычных условиях я бы, вероятно, просто придерживался старого пространства имен, но проблема в том, что наши клиенты не хотят видеть имя одного из своих конкурентов где-либо в приложении. Если они не увидят трассировку стека, свойства сборки и т. Д., Они не должны отображаться. Оно не предназначено для того, чтобы скрывать наших сотрудников или делать что-то зловещее, нам просто нужно убедиться, что люди знают, что мы отдельная сущность, отдельное руководство, и им не нужно беспокоиться о том, что данные передаются и т. Д.

Теперь вопрос. Каков наилучший способ выполнить этот тип всеохватывающего переименования? Необходимо изменить следующее:

  • Пространство имен для (почти) каждого класса в приложение
  • Каждое using утверждение в приложении, которое ссылается на старые имена
  • Структура папок для каждого проекта
  • Ссылки между проектами, которые зависят от измененной структуры папок
  • .Sln файлы, которые ссылаются на измененную структуру папок
  • Любые ссылки на те классы, которые полностью квалифицированный (должно быть мало и далеко между)
  • Любые ссылки на эти классы в конфигурационных файлах xml (config разделы и т. д.)
  • AssemblyInfo.cs файлы для каждой сборки
  • AssemblyName в каждом файле .csproj

Я застрял в стратегии «найди, замени, помолись», или есть что-то лучше?

Ответы [ 5 ]

41 голосов
/ 26 января 2011

Щелкните правой кнопкой мыши на текущем пространстве имен и выберите Refactor -> Rename и измените имя во всплывающем окне, которое появится через некоторое время. Введите новое имя и нажмите ОК.

Если у вас несколько глубин в вашем пространстве имен, Visual Studio не позволит вам ввести точку. Однако, если вы скопируете и вставите точку, несмотря на предупреждение, это сработает.

9 голосов
/ 26 января 2011

ReSharper. Получите версию 5.1 от JetBrains бесплатно в течение 30 дней (более чем достаточно времени для переименования). Поместите курсор на пространство имен, которое вы хотите изменить, и дважды нажмите Ctrl-R (ReSharper Rename). Он будет работать с пространством имен на любом количестве уровней и преобразует любое использование этого пространства имен в новое. Однако вам придется изменить каждое уникальное пространство имен в вашем решении (если только вы не выберете «Найти / заменить»)

3 голосов
/ 26 января 2011

Сначала я бы попробовал вариант Refactor->Rename. Но, как упоминалось в комментариях к другим ответам, это не работает так хорошо (или я не нашел, как заставить это работать). Поэтому я предпочитаю использовать следующий сценарий, особенно если вы хотите добавить дополнительное пространство имен.

1) Переименуйте ваше корневое пространство имен (WidgetCompany) во что-то вроде NAMESPACE_TO_BE_REPLACED, используя Refactor-Rename
2) Замените NAMESPACE_TO_BE_REPLACED вашим окончательным пространством имен (NewCompany.WidgetSoftware), используя диалог find-n-replace

И не забудьте переименовать проекты, пространства имен по умолчанию и т. Д.

2 голосов
/ 24 ноября 2015

Если у вас есть ReSharper:

  1. Щелкните правой кнопкой мыши проект, Свойства . Измените пространство имен по умолчанию на желаемое Пространство имен.

  2. Щелкните правой кнопкой мыши проект, Refactor -> Настройте пространство имен , чтобы обновить все пространства имен для использования пространства имен по умолчанию

Тогда просто позволь ему творить чудеса.

1 голос
/ 24 октября 2015
  • Открыть случайный класс в [WidgetCompany.Department.Something]
  • Редактировать-> Найти и заменить-> Заменить в файлах
  • Введите "WidgetCompany.Department.Something" в FindWhat area
  • Введите "NewCompany.Something" в Замените на area
  • Выберите текущий проект в Просмотрите в area.
  • Заменить все
...