2011-10-26 37 views
6

Mam dwa projekty VS C# (specjalnie dla wtyczki Outlook), które uważam za bardzo podobne z wyjątkiem może 100 linii kodu. Trochę się martwię, że mogą istnieć inne opcje konfiguracyjne dla projektu, które są różne, więc chciałbym je porównać.Porównać (i połączyć) dwa projekty VS C#

Jaki jest najlepszy sposób, aby zobaczyć różnice między dwoma bazami kodów?

Próbowałem umieścić dwa projekty w równoległych katalogach i używając diff, ale ponieważ projekty mają inną nazwę, niektóre pliki nie pasują do siebie. Zastanawiam się, czy jest łatwiejszy sposób na zrobienie tego?

+0

Czy zajęcia w "różnych" plikach źródłowych mają takie same nazwy? Możesz próbować budować oba projekty i porównywać wbudowane złożenia: http://stackoverflow.com/questions/652432/compare-compiled-net-assemblies –

Odpowiedz

3

Wygląda na to, że trzeba przejść przez coś takiego, jak WinMerge i wskazać różnice między dwoma projektami. To nic nie kosztuje i wiem, że możesz porównywać zawartość folderów z WinMerge, więc to prawdopodobnie dobre miejsce na początek. Uruchom WinMerge na folderach projektu i powinien wygenerować szczegółowe porównanie opisujące różnice między plikami.

Zobacz ten tutorial na foldery porównujących:
http://manual.winmerge.org/CompareDirs.html

enter image description here

+0

Czy to zadziała dla zmieniono nazwy plików? –

+0

Jestem prawie pewien, że istnieją sposoby rozliczania się z tego. W najgorszym przypadku wiem, że możesz wybrać określone pliki do porównania. –

+1

Radzenie sobie z plikami o zmienionej nazwie jest trudne.Jeśli pliki zostały nieznacznie zmienione i zmienione, trudno byłoby narzędziu do porównywania wiedzieć, że w pewnym momencie były one tym samym plikiem. Gdyby spróbował to zrobić, prawdopodobnie dałoby ci wiele fałszywych trafień, gdyby zobaczył podobne pliki o różnych nazwach. Musiałby istnieć pewien próg, który decydowałby o tym, czy dwa podobne pliki były podobne/wystarczająco różne, aby podjąć taką decyzję. – AaronLS

2

Jednym ze sposobów: rób kopie obu projektów, zmieniaj nazwy plików i folderów w jeden, aby pasowały do ​​plików i folderów w drugim, a następnie użyj swojego ulubionego narzędzia porównywania folderów, aby porównać te dwa.

To ci nie pomoże, chyba że między tymi dwoma projektami istnieje prawdziwa relacja kopiuj i wklej.

Lepszym sposobem byłoby zastosowanie refaktoryzacji. Po utworzeniu testów jednostkowych dla obu projektów i uzyskaniu odpowiedniego poziomu pokrycia kodu, należy przejść do klasy według klasy i metody, używając metody z użyciem refaktoryzacji, aby spróbować uczynić pary metod identycznymi. Możesz następnie zidentyfikować metody, które powinny zostać wciągnięte do klas podstawowych lub przeniesione do innych klas.

Ostatecznie możesz znaleźć pary klas, które są identyczne. Przenieś te klasy do wspólnej biblioteki, a następnie zmień nazwę wszystkich zastosowań jednej z klas, aby była używana przez drugą. Następnie usuń to, którego już nie używasz.

Powtarzaj tę czynność, dopóki nie będzie więcej duplikacji.

+0

Chciałbym tak samo, aż niektórzy jeszcze przyjdą z lepszą odpowiedzią. –

1

Gorąco polecam Code Compare (nie związany, po prostu szczęśliwym użytkownikiem) dla tego rodzaju pracy - jest to darmowa wersja i bardziej zaawansowana wersja komercyjna.

Integruje ładnie z VS i posiada podświetlanie składni dla C#, C/C++ itp

1

Jeśli masz modyfikacje jak zmienia nazwę lub częściowych ruchów kodowych, importowanie obie wersje w jednym git repozytorium (jako dwie różne zatwierdzenia pojedynczego katalogu) może pomóc. Git śledzi zawartość plików, nie same pliki, więc można się dowiedzieć np. funkcja, która została przeniesiona z jednego pliku do drugiego.