2011-10-26 32 views
6

我有兩個VS C#項目(特別是Outlook插件),我認爲它們是非常類似於,可能有100行代碼。我有點擔心這個項目可能有其他配置選項,所以我想比較這兩個。比較(和合並)兩個VS C#項目

查看兩個代碼庫之間差異的最佳方法是什麼?

我已經嘗試將兩個項目放在並行目錄中並使用diff,但由於項目命名不同,因此某些文件不匹配。我只是想知道是否有更簡單的方法來做到這一點?

+0

「不同」源文件中的類是否具有相同的名稱?你可以嘗試構建這兩個項目並比較構建的組件:http://stackoverflow.com/questions/652432/compare-compiled-net-assemblies –

回答

3

這聽起來像你需要像WinMerge這樣的東西來通過並指出兩個項目之間的差異。它是免費的,我知道你可以將文件夾內容與WinMerge進行比較,所以這可能是一個很好的開始。在項目文件夾上運行WinMerge,它應該生成一個詳細的比較概述文件之間的差異。

參見比較文件夾,這個教程:
http://manual.winmerge.org/CompareDirs.html

enter image description here

+0

這項工作重命名文件? – 2011-10-26 19:16:39

+0

我很確定有這方面的計算方法。在最壞的情況下,我知道你可以選擇特定的文件進行比較。 –

+1

處理重命名的文件很困難。如果文件已被重新命名和編輯,那麼比較工具很難知道它們在某個時刻實際上是同一個文件。如果它試圖做到這一點,它可能會給你很多誤報,它會看到類似的不同名稱的文件。並且必須有一些門檻來決定兩個相似的文件是否相似/不同以作出該決定。 – AaronLS

2

一種方法:製作兩個項目的副本,將文件和文件夾重命名爲一個以匹配另一箇中的文件和文件夾,然後使用您最喜歡的文件夾比較工具比較兩者。

除非兩個項目之間存在真正的複製和粘貼關係,否則這不會對您有所幫助。

更好的方法是使用重構。爲兩個項目創建單元測試並獲得足夠的代碼覆蓋級別之後,請按類和方法按重構方法嘗試使方法對相同。然後,您可以確定應該拉入基類或移入其他類的方法。

最終,您可能會發現相同的類對。將這些類移到共同的庫中,然後將其中一個類的所有用途重命名爲另一個類的用法。然後刪除不再使用的那個。

重複,直到沒有更多的重複。

+0

我會一直到其他一些人有更好的答案 –

1

我強烈建議Code Compare(不附屬,只是一個快樂的用戶)對這樣的工作 - 有一個免費版本和更先進的商業版本。

它與VS很好地集成,具有語法高亮顯示的C#,C/C++等

1

如果你有喜歡的重命名或部分代碼的移動,導入這兩種版本爲單一git庫的修改(如兩個不同提交一個目錄)可能會有所幫助。 Git跟蹤文件的內容,而不是文件本身,因此可以找出例如一個已經從一個文件移動到另一個文件的函數。