2012-07-05 30 views
6

Tôi cố gắng tạo ra một công cụ đủ thông minh để lập trình các mã nhị phân phiên bản được tạo ra bởi mã C# giống nhau được biên dịch trên hai máy riêng biệt tại các thời điểm khác nhau và kết luận rằng mã trong khi có thể nhận bất kỳ thay đổi mã nào nếu có trong mã C# được sử dụng để tạo các tệp nhị phân này.Xây dựng lặp lại từ cùng một mã nguồn C# trên các máy khác nhau

Tôi đã thử sử dụng một số phương pháp tiếp cận nhưng để giữ ngắn gọn, tôi sẽ chỉ dính vào nỗ lực mới nhất. Tôi chạy ildasm với tùy chọn/văn bản trên các tệp nhị phân và thay thế GUID cho các trường ẩn danh vv trong văn bản, nhưng khi các tệp nhị phân đến từ các chiếc khác nhau, tôi thấy rằng văn bản được tạo ra bởi tùy chọn ILDASM/văn bản được sắp xếp lại. Các tệp nhị phân bắt nguồn từ cùng một mã nhưng được biên dịch bởi cùng một thiết lập trên các máy khác nhau cũng xuất hiện nhiều thứ tự sắp xếp lại. Bất kỳ đề nghị làm thế nào người ta có thể kiểm soát sắp xếp lại này của IL sẽ được nhiều đánh giá cao?

Chúc mừng

PS: Bất kỳ chiến lược thay thế nào đáng tin cậy nhất cũng được hoan nghênh nhất.

+1

và bạn không thể so sánh mã nguồn vì? ... –

+0

Ngoài ra, điều này có thể có liên quan: http://stackoverflow.com/questions/1335427/why-does-c-sharp-generate-different-exes -for-the-same-source-code –

+1

Nếu có thể, bạn có thể cho biết tại sao bạn cần một công cụ như vậy? Có lẽ có giải pháp tốt hơn cho vấn đề bạn đang cố gắng giải quyết bằng cách tạo ra nó. –

Trả lời

2

tôi thấy rằng một giải pháp phù hợp với những gì Eric Lippert đã đề cập trong bài viết của mình những gì thân chủ của ông đã kết thúc giải quyết cho có thể đạt được bằng cách thiết lập mối quan hệ bộ vi xử lý cho quá trình biên soạn đến 01. Sau này các tập tin thực thi/dlls sản xuất gần như giống hệt nhau trong excpetion som mvid và guids được sử dụng. Chạy ILDASM trên các tệp nhị phân này với chế độ văn bản và xây dựng một công cụ băm đơn giản để loại bỏ công cụ ngẫu nhiên này cung cấp giải pháp như vậy. Tôi chỉ cung cấp điều này để hoàn thành và giúp đỡ những người khác có thể đối mặt với vấn đề này.

7

Waiting for Eric Lippert thức dậy :) - cộng đồng wiki ra khỏi bình luận @mikez 's:

Khi một nhà phát triển chính (Eric Lippert) trong đội ngũ biên dịch nói, bạn nên lắng nghe: http://ericlippert.com/2012/05/31/past-performance-is-no-guarantee-of-future-results/ chứa giải thích chi tiết và đề xuất mạnh mẽ để không làm điều đó (có khả năng phản hồi cho câu hỏi chính xác này):

Việc biên dịch cùng một chương trình C# hai lần được đảm bảo để tạo ra cùng một đầu ra nhị phân?

số

Các vấn đề liên quan