2011-10-26 43 views
6

Tôi có hai dự án VS C# (cụ thể, đối với plugin Outlook) mà tôi cho là rất tương tự với ngoại lệ có lẽ là 100 dòng mã. Tôi hơi lo lắng rằng có thể có các tùy chọn cấu hình khác cho dự án khác nhau, vì vậy tôi muốn so sánh hai dự án đó.So sánh (và hợp nhất) hai dự án VS C#

Cách tốt nhất để xem sự khác biệt giữa hai codebases là gì?

Tôi đã thử đặt hai dự án vào các thư mục song song và sử dụng khác biệt, nhưng vì các dự án được đặt tên khác nhau nên một số tệp không khớp. Tôi chỉ tự hỏi nếu có một cách dễ dàng hơn để làm điều này?

+0

Các lớp trong tệp nguồn 'khác nhau' có cùng tên không? Bạn có thể thử để xây dựng cả hai dự án và so sánh các Assemblies được xây dựng: http://stackoverflow.com/questions/652432/compare-compiled-net-assemblies –

Trả lời

3

Có vẻ như bạn cần một cái gì đó như WinMerge để xem xét và chỉ ra sự khác biệt giữa hai dự án. Hoàn toàn miễn phí và tôi biết bạn có thể so sánh nội dung thư mục với WinMerge, vì vậy đó có thể là một nơi tốt để bắt đầu. Chạy WinMerge trên các thư mục dự án và nó sẽ tạo ra một so sánh chi tiết nêu rõ sự khác biệt giữa các tệp.

Xem hướng dẫn này trên thư mục so sánh:
http://manual.winmerge.org/CompareDirs.html

enter image description here

+0

Điều này sẽ làm việc cho đã đổi tên tệp? –

+0

Tôi khá chắc chắn có nhiều cách để tính toán điều đó. Trong trường hợp xấu nhất, tôi biết bạn có thể chọn các tệp cụ thể để so sánh. –

+1

Xử lý các tệp được đổi tên là rất khó.Nếu các tệp đã được đổi tên và chỉnh sửa đôi chút, sẽ rất khó cho một công cụ so sánh để biết rằng chúng thực sự là cùng một tệp tại một thời điểm nào đó. Nếu nó cố gắng làm điều này, nó có lẽ sẽ cho bạn rất nhiều những mặt tích cực sai, nơi nó sẽ thấy các tập tin tương tự với các tên khác nhau. Và sẽ phải có một số ngưỡng mà nó đã sử dụng để quyết định xem hai tệp tương tự có giống nhau hay không khác nhau để đưa ra quyết định đó. – AaronLS

2

Một cách: Tạo bản sao của cả hai dự án, đổi tên tệp và thư mục thành một để khớp với tệp và thư mục trong thư mục khác, sau đó sử dụng công cụ so sánh thư mục yêu thích của bạn để so sánh hai.

Điều này sẽ không giúp bạn trừ khi có mối quan hệ sao chép và dán thực giữa hai dự án.

Cách tốt hơn là sử dụng tái cấu trúc. Sau khi tạo các bài kiểm tra đơn vị cho cả hai dự án và đạt được mức độ bao phủ mã đầy đủ, hãy đi lớp theo lớp và phương thức theo phương pháp bằng cách tái cấu trúc để cố gắng thực hiện các cặp phương thức giống hệt nhau. Sau đó bạn có thể xác định các phương thức cần được kéo vào các lớp cơ sở hoặc chuyển vào các lớp khác.

Cuối cùng, bạn có thể tìm thấy các cặp lớp giống nhau. Di chuyển các lớp đó vào một thư viện chung, sau đó đổi tên tất cả các cách sử dụng của một trong các lớp để sử dụng lớp kia. Sau đó xóa một không còn sử dụng.

Lặp lại cho đến khi không còn trùng lặp nữa.

+0

Tôi sẽ giống nhau cho đến khi một số khác đi kèm với một số câu trả lời tốt hơn –

1

tôi khuyên Code Compare (không liên kết, chỉ cần một người sử dụng hạnh phúc) cho các loại hình công việc - có một phiên bản miễn phí và nhiều hơn nữa phiên bản thương mại tiên tiến.

Nó tích hợp độc đáo với VS và có cú pháp tô sáng cho C#, C/C++, vv

1

Nếu bạn đã có những thay đổi như đặt lại tên hoặc di chuyển đang từng phần, nhập khẩu cả hai phiên bản vào một kho git (như hai khác nhau cam kết của một thư mục duy nhất) có thể hữu ích. Git theo dõi nội dung của các tệp, chứ không phải bản thân tệp, vì vậy có thể tìm ra ví dụ: một hàm đã được chuyển từ một tệp này sang tệp khác.