Подтвердить что ты не робот

Почему С# генерирует разные EXE файлы для одного и того же исходного кода?

Каждый раз, когда мы перекомпилируем наше приложение С#, мы получаем EXE с различными сигнатурами MD5. Мы перекомпилируем одну и ту же машину, минуты друг от друга. Почему же тот же исходный код не дает того же выхода? Есть ли способ исправить это?

4b9b3361

Ответ 1

"Таким образом, каждая сборка имеет:

  • Временная метка в двух местах
  • GUID, который соответствует PDB
  • То, что кажется полностью случайным GUID, сгенерированным каждым компилятором.
  • Счетчик, указывающий, что сборка сборки - сгенерирована только в последующих сборках Visual Studio.

от

http://ritter.vg/#code_adventures_clr1

Ответ 2

Я думаю, что ключ может быть "минут друг от друга". Если в EXE есть метка времени, это изменит подпись MD5.

Ответ 3

Мне пришлось разбирать эти случаи раньше, и, похоже, это просто изменения типа DateTime-stamp (это предположение). Если вы поместите обе сборки в инструменты diff, вы увидите, что только очень небольшое количество строк в PE изменилось; если вы измените даже небольшое количество кода и сравните сборки, вы увидите значительно большие различия.

Вот вопрос, который я открыл, исследуя инструменты для определения "реальных" отличий от поверхностных:

.NET Diff/Compare Tool - Что доступно?

Ответ 4

Скорее всего, у вас есть несколько * в номере версии сборки. Это приводит к тому, что номер версии сборки будет автоматически увеличиваться при сборке, что приведет к заметной разнице в выводимой сборке. Следовательно, другая контрольная сумма MD5.

Попробуйте переключить номер версии на постоянную версию сборки и посмотрите, устраняет ли это проблему.

Ответ 5

Вы можете попробовать запустить ildasm.exe(мой путь для этого - C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin) на двух .exe.

Затем выгрузите необработанное представление заголовков и сравните их с инструментом diff. Если по-прежнему нет никакой разницы, то это могут быть заголовки PE, которые нуждаются в более продвинутом инструменте для обнаружения. Ildasm дает вам размер заголовка PE и другие статистические данные, хотя.

Ответ 6

Будет создан встроенный номер версии, который будет изменяться с каждой сборкой.