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

Какой лучший способ сделать массовое пространство имен переименовывается в большое приложение С#?

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

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

WidgetCompany.Department.Something

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

NewCompany.Something

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

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

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

Я придерживался стратегии find-replace-pray или там что-то лучше?

4b9b3361

Ответ 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 поддерживает это, как описано здесь. Он работает для любой иерархии (с точками, изменениями корневого пространства имен и т.д.) И корректно обновляет все зависимости.

  1. Поместите курсор в имя класса

  2. Нажмите Ctrl+., чтобы вызвать меню "Быстрые действия и рефакторинг"

  3. Выберите Переместить в пространство имен Move to namespace refactoring

  4. .В открывшемся диалоговом окне выберите целевое пространство имен, которое вы хотите переместить, на Select a namespace dialog box.