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

Да, == плохо для сравнения строк (любые объекты действительно, если вы не знаете, что они канонические). == просто сравнивает ссылки на объекты. .equals() тесты для равенства. Для строк часто они будут такими же, но, как вы обнаружили, это не гарантируется всегда.

13
задан Jeffrey Hantin 18 November 2014 в 22:31
поделиться

6 ответов

«Итак, каждая сборка имеет:

  1. Отметку времени в двух местах
  2. GUID, который соответствует PDB
  3. Кажется, что это полностью случайный GUID, генерируемый при каждой компиляции.
  4. Счетчик, показывающий, что такое сборка сборки - создается только в последующих сборках Visual Studio. "

from:

http://ritter.vg/#code_adventures_clr1

18
ответ дан 1 December 2019 в 20:57
поделиться

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

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

2
ответ дан 1 December 2019 в 20:57
поделиться

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

4
ответ дан 1 December 2019 в 20:57
поделиться

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

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

.NET Assembly Diff / Compare Инструмент - Что доступно?

2
ответ дан 1 December 2019 в 20:57
поделиться

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

0
ответ дан 1 December 2019 в 20:57
поделиться

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

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

2
ответ дан 1 December 2019 в 20:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: