Выявление / устранение различий в идентичной сборке .NET exe

Я снова пытаюсь сравнить два .exe, на этот раз с некоторыми изменениями.

  • Сборка проекта в Microsoft Visual Studio 2010
  • Целевая платформа проекта = клиентский профиль .NET Framework 3.5

Я создаю проект, запускаю dumpbin /rawdata на .exe и выводю в текстовый файл. Затем я заново собираю проект, запускаю dumpbin /rawdata на новом .exe и выводю в новый текстовый файл. Затем я проверяю каждую из них, чтобы убедиться, что они одинаковы (между сборками не вносятся изменения).

Я получаю разные значения CRC. Когда я пропускаю необработанные данные через windiff, я вижу различия в разделе Raw Data #1, который, как мне кажется, является фактическими данными, сгенерированными из исходного кода проекта (исправьте, если я ошибаюсь).

В Raw Data #1 есть 3 различия, одна из которых включает .pdb.

Вопросы:

  1. Кто-нибудь знает, где я могу отключить отладочную информацию в VS 2010 (аналогично Project Property Pages -> Config Properties -> Linker -> Debugging -> Generate Debug Info в VS 2005)
  2. Есть ли какие-нибудь уловки, чтобы выяснить, где на самом деле существуют выделенные различия в WINDIFF в исходном коде?

Спасибо, ZayJay

PS - не стесняйтесь спрашивать разъяснений, и еще раз спасибо. Я искал какое-то время без особого успеха. Я так рад, что нашел этот ресурс.

ИЗМЕНИТЬ / ОБНОВИТЬ. Теперь я перешел к компиляции кода с помощью ngen, чтобы обойти MSIL и все, что там обнаруживалось как различия. Одно из различий было в этой области: _7 _... и я ничего не могу сделать из ascii в другом различии (я избавился от информации .pdb).

Я хотел бы знать, есть ли способ просмотреть / извлечь скомпилированный код для просмотра.

Я пробовал ngen display "App Name" и искал в WINDOWS/assembly, но не нашел ничего подходящего (к тому же я не знаю на 100%, что ищу ...)

Спасибо за уделенное время, ZayJay


person ZayJay    schedule 16.05.2011    source источник
comment
Я думаю, что в сборках есть временные метки, которые могут объяснить различия.   -  person Lasse V. Karlsen    schedule 16.05.2011
comment
Спасибо, а вы знаете, есть ли несколько меток времени? Потому что у меня есть 3 области разницы в том, что я ожидал быть идентичным .exe (одна из которых выглядит так, как будто она включает .pdb из ascii). Или каким-либо способом отключить временные метки в настройках проекта?   -  person ZayJay    schedule 16.05.2011
comment
Смутные воспоминания о том, что их было несколько, да, но поскольку они расплывчаты, они могут ошибаться. Я также мог совершенно ошибаться, говоря о временных метках. Вы проверили, что изменения находятся в одном и том же месте и каждый раз имеют одинаковый размер?   -  person Lasse V. Karlsen    schedule 16.05.2011
comment
Также обратите внимание, что я знаю, что этот вопрос задавался раньше, и общее мнение заключалось в том, чтобы избежать перестройки вашего кода, если вам это не нужно, тогда вам не придется иметь дело с измененными сборками, что, по-видимому, является частью сделки. . Могу я спросить, почему вам нужно перестраивать, чтобы они были идентичными, а не просто не перестраивать его, если код не изменился?   -  person Lasse V. Karlsen    schedule 16.05.2011
comment
Я проверяю программное обеспечение для компании, и тест подтверждает, что Visual Studio 2010 будет постоянно и предсказуемо создавать файлы .exe. Итак, я хочу создать .exe из источника, сохранить его необработанные данные, затем создать еще один .exe и убедиться, что они вышли одинаковыми. Я заставил его работать с .exe, созданным на C ++, но здесь возникли проблемы. Кроме того, различия в том же месте, плюс-минус несколько строк в зависимости от настроек проекта, которые я включил (возился с ними, чтобы попытаться исправить различия)   -  person ZayJay    schedule 16.05.2011
comment
C # и C ++ компилируются по-разному. Убедитесь, что информация о сборке (например, AssemblyVersion) не изменяется.   -  person Security Hound    schedule 16.05.2011
comment
Нет, версия сборки не меняется между сборками. : - \. Спасибо за предложение.   -  person ZayJay    schedule 16.05.2011
comment
Мой руководитель посоветовал ngen.exe обойти MSIL и попытаться dumpbin или запустить на нем наш генератор CRC; Я никогда не использовал его, но читаю об этом и буду обновлять любые выводы (хотя сейчас кажется, что ngen.exe устанавливает скомпилированный .exe в кеш, чтобы не было JIT-компиляции ... я что-то упустил)   -  person ZayJay    schedule 16.05.2011


Ответы (1)


Существует несколько инструментов для сравнения сборок, Скотт Хансельман перечисляет некоторые из их в своем блоге.

В этом вопросе есть еще несколько

person aL3891    schedule 16.05.2011
comment
Спасибо. Я продолжаю использовать инструменты Windows, чтобы избежать дальнейшей проверки программного обеспечения, и пробовал использовать инструменты ildasm и ilasm. Проверка различий в выводе ildasm позволила избавиться от всех различий, кроме GUID <PrivateImplementationDetails>. Это даже повторяющееся значение или это что-то случайно сгенерированное во время сборки? В настоящее время я изучаю это больше, но я достигаю точки, когда мне, возможно, придется отбросить это и двигаться дальше ... - person ZayJay; 17.05.2011