Объединение файлов проектов/решений - это известная катастрофа среди разработчиков/администраторов SCM, выполняющих слияния в их исходном контроле.
Возьмем, к примеру, общий сценарий: разработка выполняется по проекту/решению в двух разных ветвях. Когда приходит время слияния обратно в основную линию развития, между VCPROJ (и SLN) очень мало сходства.
Причина в том, что Visual Studio может изменить (и изменить) местоположение различных XML-подобных элементов в этих файлах. Например, Конфигурации Debug и Release могут менять порядок при каждой операции сохранения в файле proj. Это делает невозможным легкое включение изменений из каждой ветки разработки, даже не учитывая автоматического слияния.
Я могу предположить, что Microsoft использует некоторую систему хеширования perl для хранения структур vcproj, поэтому рендеринг файлов при операции сохранения не упорядочен.
Сначала я хотел бы спросить: кто-нибудь нашел какой-то изящный способ обхода этого?
Во-вторых, я хотел бы сделать два предложения:
-
Попросите Microsoft переопределить вышеуказанные файлы и ограничить их некоторым жестким упорядочением элементов.
-
найти инструмент (или написать один), который сортирует файлы vcproj (xml format) и sln (sln format...) в алфавитном порядке, рекурсивно (все элементы внутри элементов и т.д.). Использование этого инструмента как для исходных, так и для целевых файлов позволит легко указать (и объединить) изменения, надеясь, что Visual Studio прочитает отсортированный, объединенный проект или sln файл.
Любые другие идеи и мысли приветствуются.