Массовый рефакторинг C # - PullRequest
3 голосов
/ 28 мая 2009

Я хочу иметь возможность проводить рефакторинг 500 проектов одновременно.

У меня есть около 20 решений, и у меня нет мастер-решения со всем, потому что я не нашел способ автоматически сгенерировать его .

Есть предложения?

Спасибо

Редактировать

Я попробовал slnTools из codeplex, чтобы сгенерировать решение, и Visual Studio практически полностью уничтожила всю операционную систему. Не уверен, что это решение было сгенерировано неправильно или это было просто ограничение Windows / Visual Studio.

Ответы [ 5 ]

3 голосов
/ 28 мая 2009

Чтобы создать огромное решение, вы должны иметь возможность начать макрос примерно так:

    Dim d As New System.IO.DirectoryInfo(System.IO.Directory.GetCurrentDirectory())
    For Each f As System.IO.FileInfo In d.GetFiles("*.*proj")
        DTE.Solution.AddFromFile(f.FullName)
    Next
    DTE.Solution.Close(True)

Прежде чем вы начнете мегарефакторинг, я бы предложил вам использовать что-то вроде NDepend для анализа структуры зависимостей кода и сравнения ее с вашими целями по рефакторингу. Вам понадобятся только проекты в памяти, которые будут затронуты определенным рефакторингом. Если вы можете ограничить набор, который вам нужен, вы получите большую выгоду.

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

  1. Сохранить копию библиотеки классов
  2. Загрузите Project 1 и библиотеку классов и выполните рефакторинг. Закройте решение.
  3. Восстановление библиотеки классов из сохраненной копии.
  4. Загрузите Project 2 и библиотеку классов и повторите рефакторинг. Закройте решение.

и т.д.. Наконец, сохраните последнюю измененную копию библиотеки классов. Если вы действительно повторили рефакторинг, все десять проектов должны быть счастливы.

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

1 голос
/ 28 мая 2009

Что именно вы хотите реорганизовать? ReSharper , пожалуй, самый известный инструмент для крупномасштабных рефакторингов ... но то, насколько он применим, зависит от того, что вы хотите сделать.

Вы всегда можете скачать пробную версию и попробовать ее ...

1 голос
/ 28 мая 2009

Если все они используют одни и те же библиотеки бизнес-областей / областей данных, вы можете выполнить рефакторинг, а затем обновить ссылки в проектах.

Скорее всего, вы хотите создать эту область бизнеса / данных из этих распределенных проектов. Я не знаю подробностей, но я готов поспорить, что объединение 20 решений не поможет вам в рефакторинге общего кода.

  1. Я бы начал с малого и создал бы новое решение, которое будет вашим обычным приложением.
  2. Включите очевидные части общего кода в это решение и ссылайтесь на его скомпилированные библиотеки в других ваших проектах.
  3. Просмотрите ваши проекты и повторяйте, пока у вас не появится нечто похожее на искомую структуру.
0 голосов
/ 24 февраля 2011

Вам может быть лучше с меньшим количеством проектов, каждый из которых имеет больше файлов в каждом. Нетрудно написать программу на C # для созданного файла проекта, содержащего все ваши файлы souce.

Visual Studio может или не может справиться с этим ...

0 голосов
/ 28 мая 2009

Я думаю, что ничего не сделано , чтобы удовлетворить ваши потребности.

Вы можете попробовать slnTools , чтобы увидеть, как манипулировать файлами sln, и объединить их в один файл .sln.

Но я не уверен, что Visual Studio может нормально обрабатывать 500 открытых проектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...