Чтобы создать огромное решение, вы должны иметь возможность начать макрос примерно так:
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 для анализа структуры зависимостей кода и сравнения ее с вашими целями по рефакторингу. Вам понадобятся только проекты в памяти, которые будут затронуты определенным рефакторингом. Если вы можете ограничить набор, который вам нужен, вы получите большую выгоду.
Если вы не можете поместить их все в память, вы все равно сможете разделить работу - вам просто придется повторить ее. Рассмотрим случай, когда у вас есть одна библиотека классов, которая используется десятью другими проектами, и вы хотите реорганизовать открытый интерфейс.
- Сохранить копию библиотеки классов
- Загрузите Project 1 и библиотеку классов и выполните рефакторинг. Закройте решение.
- Восстановление библиотеки классов из сохраненной копии.
- Загрузите Project 2 и библиотеку классов и повторите рефакторинг. Закройте решение.
и т.д.. Наконец, сохраните последнюю измененную копию библиотеки классов. Если вы действительно повторили рефакторинг, все десять проектов должны быть счастливы.
Я бы также воспользовался возможностью для рефакторинга в сторону гибкости, чтобы вам больше не приходилось делать это снова. Доступ к библиотеке классов через интерфейсы или фасадные классы может изолировать вас от изменений в общедоступном интерфейсе.