Каждый раз, когда мы перекомпилируем наше приложение C#, мы получаем EXE с различными сигнатурами MD5. Мы перекомпилируем одну и ту же машину, минуты друг от друга. Почему же тот же исходный код не дает того же выхода? Есть ли способ исправить это?Почему C# генерирует разные EXE для одного и того же исходного кода?
ответ
«Таким образом, каждый узел имеет:
- A Timestamp, в двух местах
- GUID, которые соответствовали PDB
- То, что кажется совершенно случайным GUID генерируется каждый компиляции
- A. который указывает, что представляет собой сборка сборки - генерируется только в последующих сборках Visual Studio ».
от:
Хороший ответ. Благодаря! – Gili
Мне пришлось вскрывать эти случаи раньше, и, похоже, это изменения типа DateTime-stamp (это предположение). Если вы поместите обе сборки в инструменты diff, вы увидите, что только очень небольшое количество строк в PE изменилось; если вы измените даже небольшое количество кода и сравните сборки, вы увидите значительно большие различия.
Вот вопрос, который я открыл, исследуя инструменты, чтобы определить «реальное» отличие от поверхностных:
Там будет построен в номере версии, которая будет меняться с каждой сборкой.
Я думаю, что ключ может быть «минут друг от друга». Если в EXE есть метка времени, это изменит подпись MD5.
Это догадка? – Gili
Я никогда не рассматривал EXE, созданный компилятором C#, и я больше не коснулся C# в течение года. Но все это прекрасно объясняет, и это имеет смысл. –
Скорее всего, у вас есть несколько * в номере версии сборки. Это приводит к тому, что номер версии сборки будет автоматически увеличиваться при сборке, что приведет к заметной разнице в выводимой сборке. Следовательно, другая контрольная сумма MD5.
Попробуйте переключить номер версии на постоянную версию сборки и посмотрите, не устраняет проблему.
Вы можете попробовать запустить ildasm.exe (мой путь для этого C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin
) на два .exes.
Затем выгрузите необработанный вид заголовков и сравните их с инструментом diff. Если по-прежнему нет никакой разницы, то это могут быть заголовки PE, которые нуждаются в более продвинутом инструменте для обнаружения. Ildasm дает вам размер заголовка PE и другие статистические данные.
Я настоятельно рекомендую использовать флаги/source и/out. –
- 1. Почему Digester генерирует разные хеш-коды для одного и того же сообщения, кода и итерации
- 2. Почему компилятор Flex генерирует различные размеры файлов в последовательных компиляциях одного и того же исходного кода?
- 3. MFC .exe и .dll производят разные разрешения для одного и того же кода
- 4. разные результаты печати от одного и того же кода
- 5. Пока C# генерирует случайный вывод Почему Java генерирует «Hello World» для одного и того же фрагмента кода?
- 6. разные значения одного и того же указателя
- 7. Почему console.log и document.write дают разные выходные данные для одного и того же кода?
- 8. DefaultPasswordHasher, генерирующий разные хэши для одного и того же значения
- 9. Почему `gzip` генерирует разные двоичные файлы при сжатии одного и того же файла?
- 10. C++ дает разные выходы почти для одного и того же кода
- 11. Как построить .jar и .aar артефакт для одного и того же исходного кода с помощью Jenkins
- 12. разные индексы для одного и того же WebTable в UFT?
- 13. MD5 не последовательно генерирует одни и те же зашифрованные данные для одного и того же пароля
- 14. запуск нескольких экземпляров одного и того же exe
- 15. Почему C# вызывает разные для перегруженных методов для разных значений одного и того же типа?
- 16. Почему я получаю разные цветные изображения с использованием одного и того же кода MATLAB?
- 17. Получение 2 выходов для одного и того же кода
- 18. две разные версии одного и того же приложения
- 19. Различные версии одного и того же кода
- 20. Как включить две разные версии одного и того же заголовка?
- 21. Разный выход для одного и того же кода Ruby?
- 22. md5sum разные значения для одного и того же контента
- 23. Pyplot показывает разные цвета для одного и того же значения?
- 24. разные json-представления для одного и того же объекта
- 25. MVC разные атрибуты CSS для одного и того же компонента
- 26. Postgres ts_rank_cd разные результаты для одного и того же tsvector?
- 27. MD5 возвращает разные значения для одного и того же входа
- 28. XSD для одного и того же тега разные имена атрибутов
- 29. одинаковые операнды разные результаты в пределах одного и того же кода одна и та же машина
- 30. Почему DLL-файлы .net, сгенерированные для одного и того же кода и той же версии .net, не являются бинарными идентичными?
Я думаю, у вас уже есть, но ... вы проверили манифест с IL DASM? – yeyeyerman