Это тесно связано с CLI и PE-форматом.
ECMA CLI Specification утверждает, что каждый модуль в сборе (модуль является еще одним звеном в инфраструктуре - насколько я знаю, для регулярных проектов C# VS существует один модуль в сборе, но это также может быть изменен) содержит метаданный ID версии модуля MVID, который отличается для каждой сборки.
Раздел II.22.30 говорит
MVID должен быть заново создается для каждого модуля, используя алгоритм, указанный в ISO/IEC 11578: 1996 (приложение А) или другой совместимый алгоритм .
Кроме того, формат Portable Executable содержит ряд заголовков, некоторые из которых содержат разные временные метки (ссылки, создание файлов и т. Д.). Я не очень разбираюсь в деталях формата, но this huge article может помочь, если вам интересно - это немного старше (19 лет? Wow), но я полагаю, что основы формата все те же.
Это всего лишь две вещи, которые я нашел через пару минут, есть и другие факторы (я также прочитал, что встроенный файл может содержать некоторые данные, специфичные для машины, на которой он был построен), которые вы не можете влияют на сборку .NET.
Если вам нужен надежный способ идентификации сборки, взгляните на
Strong-Named Assemblies и как их создать.
Знаете ли вы, что компилятор C# не создает идентичные сборки, даже если исходный код не изменяется между сборками? –
Теперь. Благодаря! – user3047278