การคอมไพล์โปรแกรมใหม่สร้างไบนารีเหมือนกันแบบบิตต่อบิตหรือไม่?
สำหรับคอมไพเลอร์ทั้งหมด? ไม่คอมไพเลอร์ C # อย่างน้อยไม่ได้รับอนุญาต
Eric Lippert มีการวิเคราะห์อย่างละเอียดมากว่าทำไมผลลัพธ์ของคอมไพเลอร์ไม่ได้กำหนดขึ้น
[T] เขาคอมไพเลอร์ C # โดยการออกแบบไม่เคยสร้างไบนารีเดียวกันสองครั้ง คอมไพเลอร์ C # ฝัง GUID ที่สร้างขึ้นใหม่ในทุก ๆ แอสเซมบลีทุกครั้งที่คุณเรียกใช้ดังนั้นจึงมั่นใจได้ว่าไม่มีแอสเซมบลีสองตัวที่เหมือนกันแบบบิตต่อบิต เพื่ออ้างจากข้อมูลจำเพาะของ CLI:
คอลัมน์ Mvid จะจัดทำดัชนี GUID ที่ไม่ซ้ำกัน [... ] ที่ระบุอินสแตนซ์ของโมดูลนี้ [... ] Mvid ควรถูกสร้างขึ้นใหม่สำหรับทุกโมดูล [... ] ในขณะที่ [runtime] นั้นไม่ได้ใช้ Mvid เครื่องมืออื่น ๆ (เช่น debuggers [... ]) พึ่งพาความจริงที่ว่า Mvid มักจะแตกต่างจากโมดูลหนึ่งไปยังอีก
ถึงแม้ว่ามันจะเฉพาะเจาะจงกับคอมไพเลอร์รุ่น C # แต่จุดต่าง ๆ ในบทความสามารถนำไปใช้กับคอมไพเลอร์ใด ๆได้
ก่อนอื่นเราคาดว่าเราจะได้รับรายชื่อไฟล์ที่เหมือนกันทุกครั้งในลำดับเดียวกัน แต่ในบางกรณีถึงระบบปฏิบัติการ เมื่อคุณพูดว่า "csc * .cs" ลำดับที่ระบบปฏิบัติการนำเสนอรายการของไฟล์ที่ตรงกันเป็นรายละเอียดการนำไปปฏิบัติของระบบปฏิบัติการ คอมไพเลอร์ไม่ได้เรียงลำดับรายการนั้นลงในคำสั่งมาตรฐาน