Việc biên dịch lại một chương trình có tạo ra một nhị phân giống hệt bit-bit không?
Đối với tất cả các trình biên dịch? Không. Trình biên dịch C #, ít nhất, không được phép.
Eric Lippert đã phân tích rất kỹ về lý do tại sao đầu ra của trình biên dịch không mang tính quyết định .
[T] anh trình biên dịch C # theo thiết kế không bao giờ tạo ra cùng một nhị phân hai lần. Trình biên dịch C # nhúng GUID mới được tạo trong mỗi hội đồng, mỗi khi bạn chạy nó, do đó đảm bảo rằng không có hai hội đồng nào giống nhau từng bit một. Để trích dẫn từ đặc tả CLI:
Cột Mvid sẽ lập chỉ mục GUID duy nhất [...] xác định phiên bản này của mô-đun. [...] Mvid nên được tạo mới cho mọi mô-đun [...] Mặc dù [thời gian chạy] không sử dụng Mvid, các công cụ khác (như trình gỡ lỗi [...]) dựa vào thực tế là Mvid hầu như luôn luôn khác nhau từ mô-đun này sang mô-đun khác.
Mặc dù nó dành riêng cho một phiên bản của trình biên dịch C #, nhiều điểm trong bài viết có thể được áp dụng cho bất kỳ trình biên dịch nào .
Trước hết, chúng tôi giả định rằng chúng tôi luôn nhận được cùng một danh sách các tệp mỗi lần, theo cùng một thứ tự. Nhưng đó là trong một số trường hợp cho đến hệ điều hành. Khi bạn nói "csc * .cs", thứ tự mà hệ điều hành cung cấp danh sách các tệp phù hợp là một chi tiết triển khai của hệ điều hành; trình biên dịch không sắp xếp danh sách đó thành một thứ tự chính tắc.