Почему другая dll, созданная после чистой сборки, без изменений кода?
Когда я делаю чистую сборку моего проекта С#, созданная dll отличается от ранее построенной (которую я сохранил отдельно). Никаких изменений кода не было сделано, просто очистите и перестройте.
Diff показывает, что некоторые байты в DLL имеют изменения - немного ближе к началу и немного ближе к концу, но я не могу понять, что они представляют. Кто-нибудь знает, почему это происходит и как его предотвратить?
Это использует Visual Studio 2005/WinForms.
Обновление: Не использовать автоматическое увеличение версии или подписание сборки. Если это какая-то временная метка, как мне запретить VS писать?
Обновление:. После просмотра в Ildasm/diff кажется, что следующие элементы разные:
- Два байта в заголовке PE в начале файла.
- <PrivateImplementationDetails> {guid} раздел
- Cryptic часть таблицы строк ближе к концу (интересно, почему, я не менял строки)
- Части информации сборки в конце файла.
Не знаю, как устранить любую из них, если это вообще возможно...
Ответы
Ответ 1
Мое лучшее предположение - это измененные байты, которые вы видите, - это внутренние столбцы метаданных, которые автоматически генерируются во время сборки.
Некоторые столбцы определения метаданных спецификации ECM-335 Partition II (CLI Specification Metadata Definition), которые могут изменять per-build, даже если исходный код не изменяется вообще:
- Module.Mvid: GUID, созданный по времени сборки. Всегда меняется, каждая сборка.
- AssemblyRef.HashValue: Может измениться, если вы ссылаетесь на другую сборку, которая также была перестроена со старой сборки.
Если это действительно вас действительно беспокоит, мой лучший совет по выяснению того, что изменится, - это различие фактических таблиц метаданных. Способ их использования - использовать окно метаданных ildasm:
View > MetaInfo > Raw:Header,Schema,Rows // important, otherwise you get very basic info from the next step
View > MetaInfo > Show!
Ответ 2
Я думаю, что это поле TimeDateStamp в заголовке IMAGE_FILE_HEADER спецификации PE32.
Ответ 3
Может быть, изменились номера сборки или ревизии.