Да, ==
плохо для сравнения строк (любые объекты действительно, если вы не знаете, что они канонические). ==
просто сравнивает ссылки на объекты. .equals()
тесты для равенства. Для строк часто они будут такими же, но, как вы обнаружили, это не гарантируется всегда.
«Итак, каждая сборка имеет:
from:
Скорее всего, у вас есть несколько звездочек в номере версии сборки. Это приводит к автоматическому увеличению номера версии сборки при сборке, что приведет к видимой разнице в выходной сборке. Следовательно, другая контрольная сумма MD5.
Попробуйте переключить номер версии на постоянную версию сборки и посмотрите, решит ли это проблему.
Я думаю, что ключ может быть "в нескольких минутах". Если в EXE есть метка времени, это изменит подпись MD5.
Мне приходилось разбирать эти случаи раньше, и, похоже, это просто изменения типа штампа DateTime (это предположение). Если вы поместите обе сборки в инструменты diff, вы увидите, что в PE изменилось лишь очень небольшое количество строк; если вы измените даже небольшой объем кода и сравните сборки, вы увидите значительно большие различия.
Вот вопрос, который я открыл, исследуя инструменты для определения «реальных» отличий от поверхностных:
Будет встроенный номер версии, который будет меняться с каждой сборкой.
Вы можете попробовать запустить ildasm.exe (мой путь для этого - C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ bin
) на два .exes.
Затем выгрузите необработанное представление заголовков и сравните их с помощью инструмента сравнения. Если разницы по-прежнему нет, то, возможно, потребуется более продвинутый инструмент для обнаружения заголовков PE. Ildasm дает размер заголовка PE и другую статистику по нему.