Описание: переименование и перемещение в VS2019 с использованием git, сохранение истории git, использование R # немного, автоматическое обновление зависимых ссылок на проекты (важно для sln со многими проектами, у нас> 200)
Я использовал следующие шаги для переименования и перемещения проектов C # в Visual Studio 2019. Этот процесс использует R # для настройки пространств имен. История git сохраняется путем выполнения git mv (избегая удаления / удаления истории).
Два этапа: 1) переименовать проект на месте и 2) переместить проект.
(Использует подсказку от base2 по разгрузке проектов.)
Rename
- VS | Обозреватель решений | щелкните правой кнопкой мыши проект | Переименуйте (например, Utils.Foo в Foo).
- VS | Обозреватель решений | щелкните правой кнопкой мыши проект | Свойства | изменить имя сборки, пространство имен по умолчанию и поля информации о сборке
- Выполните 1 и 2 для соответствующего тестового проекта (например, Utils.Foo.Tests)
- VS | Обозреватель решений | проекты правой кнопкой мыши (производство и тестирование) | Рефакторинг | Настройте пространства имен
- Возможно, потребуется обновить файлы XAML, которые используют проект (вручную или с помощью соответствующего глобального поиска и замены).
- Восстановить все
- Фиксировать !! (совершать изменения до ходов)
Примечание. Папка в проводнике Windows до сих пор остается старым именем (например, Utils.Foo). Это исправлено в шагах переезда.
Шаг
Этот метод: 1) сохраняет историю мерзавцев, 2) использует R # для атомарной настройки пространств имен и 3) массово обновляет зависимые проекты (избегает утомительного ручного редактирования зависимых файлов sln и csproj).
выгрузить все проекты в решении (чтобы удаление целевого проекта не приводило к изменениям в зависимых проектах)
VS | выберите все папки решений под Решением | щелкните правой кнопкой мыши по разгрузке проектов
перемещать папки с помощью git (чтобы история сохранялась)
а) открыть командную строку разработчика на 2019 год
б) git status (чтобы проиллюстрировать «нечего коммитить, чистое дерево работы»)
c) git mv проекта, например, git mv "C: \ Code \ foo \ foo \ Utils.Foo" "C: \ Code \ Foo"
d) статус git для просмотра / проверки изменений
- удалить проект
VS | Обозреватель решений | выбрать проект | щелкните правой кнопкой мыши | Удалить (так как все проекты выгружены, это правильно НЕ удалит ссылки на него в зависимых проектах)
- повторно добавить проект (в новое место в дереве в обозревателе решений)
а) VS | Обозреватель решений | выберите целевую родительскую папку | щелкните правой кнопкой мыши | Добавить | Существующий проект
- перезагрузить все проекты
ВАЖНО: Убедитесь, что файлы * .csproj для зависимых проектов были обновлены.
(VS | Team Explorer | Изменения | дважды щелкните любой зависимый csproj в списке | inspect-verify изменение пути ProjectReference)
- Исправьте пути вручную в одном перемещенном файле * .csproj
Используйте Notepad ++ (или другой текстовый редактор), чтобы исправить пути. Часто это можно сделать с помощью простого поиска и замены (например, ../../../../ to ../../).
Это обновит ...
а) ссылки GlobalAssmeblyInfo.cs
б) пути к пакетам
c) пути к файлам диаграмм проверки зависимостей
d) пути к путям набора правил (например, <CodeAnalysisRuleSet>..\..\..\..\SolutionDependencyValidation\IgnoreWarnings.ruleset</CodeAnalysisRuleSet>
)
- Закройте и снова откройте решение (чтобы привести ссылки на проект в хорошую форму)
Сохранить все, закрыть решение, я предпочитаю удалять папки bin и obj, чтобы очистить историю, заново открыть решение
- Validate
а) VS | Team Explorer | изменения
я) должен увидеть поэтапные изменения, которые показывают файлы, которые были перемещены; ii) должен увидеть зависимые проекты (* .csproj), которые были приятно обновлены, просмотреть изменения в csproj и заметить, что пути были красиво обновлены !! (это магия, которая позволяет избежать кропотливого ручного обновления файлов csproj с помощью текстового редактора)
б) в проводнике Windows убедитесь, что старое местоположение пусто
c) Чистое решение, восстановление решения, запуск модульных тестов, запуск приложений в sln.
- Фиксировать !!