Сравните (и объедините) два проекта VS C # - PullRequest
7 голосов
/ 26 октября 2011

У меня есть два проекта VS C # (специально для плагина Outlook), которые, на мой взгляд, очень похожи, за исключением, возможно, 100 строк кода.Я немного обеспокоен тем, что могут быть другие параметры конфигурации для проекта, которые отличаются, поэтому я хотел бы сравнить эти два.

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

Я пытался поместить два проекта в параллельные каталоги и использовать diff, но поскольку проекты называются по-разному, некоторые файлы не совпадают.Мне просто интересно, есть ли более простой способ сделать это?

Ответы [ 4 ]

6 голосов
/ 26 октября 2011

Похоже, вам нужно что-то вроде WinMerge , чтобы пройти и указать на различия между двумя проектами.Это бесплатно, и я знаю, что вы можете сравнить содержимое папки с WinMerge, так что это, вероятно, хорошее место для начала.Запустите WinMerge для папок проекта, и он должен сгенерировать подробное сравнение с описанием различий между файлами.

См. Это руководство по сравнению папок:http://manual.winmerge.org/CompareDirs.html

enter image description here

5 голосов
/ 26 октября 2011

Я настоятельно рекомендую Code Compare (не аффилированный, просто счастливый пользователь) для этой работы - есть бесплатная версия и более продвинутая коммерческая версия.

Она прекрасно интегрируетсяс VS и имеет подсветку синтаксиса для C #, C / C ++ и т. д.

2 голосов
/ 26 октября 2011

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

Это не поможет вам, если между двумя проектами не было истинных отношений копирования и вставки.

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

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

Повторяйте, пока больше не будет дублирования.

1 голос
/ 27 октября 2011

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

...