Инструмент для сравнения .dll и разборки различий?

Кто-нибудь знает достойный инструмент, который будет сравнивать две разные версии одной и той же dll и извлекать различия?

Благодарность

Ответов (6)

Решение

В Reflector есть инструмент Diff . Примечание. Reflector теперь является платной программой.

Примечание: инструмент Diff больше не доступен. Вы все еще можете загрузить его через Softpedia и использовать со старыми версиями Reflector (примерно с 2010 года). В более поздних версиях это больше не работает.

Проверьте http://www.red-gate.com/products/reflector/

dotPeek от JetBrains также можно использовать. Это тоже бесплатно.

  • Откройте сборку в dotPeek
  • Выберите сборку
  • Файл -> Экспорт в проект
  • Выберите место на диске

Повторите описанное выше для сборки, которую хотите сравнить, затем откройте две папки в инструменте сравнения. Я использовал WinMerge .

Вы заметите, что у подавляющего большинства файлов есть различия. Это потому, что файлы имеют комментарий вверху, подобный этому

// MVID: {some guid here}

или

// Assembly location: {some path here}

Вы можете создать фильтр в WinMerge, чтобы игнорировать его

  • Инструменты -> Фильтр ...
  • Перейдите на вкладку "Линейные фильтры"
  • Добавьте следующий фильтр ^// MVID:
  • Добавьте следующий фильтр (необязательно) ^// Assembly location:
  • Установите флажок рядом с вашим новым регулярным выражением
  • Установите флажок "Включить фильтры строк".

Когда вы подтвердите изменения, он повторно просканирует папки и проигнорирует любую строку, начинающуюся с этого комментария. Теперь вы должны увидеть только те изменения, которые вас интересуют.

У команды Microsoft BCL есть инструмент для этого, он называется LibCheck, его можно найти здесь.

http://blogs.msdn.com/b/bclteam/archive/2005/03/21/400123.aspx

Это старый инструмент, и мне пришлось перекомпилировать исходный код, используя более позднюю версию среды выполнения, но он работает хорошо и предоставляет отчеты об изменениях в формате html.

Почему бы сначала не разобрать, а потом сравнить?

Используйте .NET Reflector (бесплатная версия - это все, что вам нужно), чтобы открыть библиотеки DLL, затем щелкните правой кнопкой мыши и выберите их экспорт в отдельные каталоги.

Затем используйте ExamDiff Pro для сравнения каталогов (вы можете получить 30-дневную бесплатную пробную версию). Вы можете перемещаться по подпапкам и при необходимости открывать каждый файл в новом окне сравнения (просто дважды щелкните в окне ExamDiff Pro). Отлично работает!

ExamDiff Pro также имеет плагин Dump PE32, который будет сравнивать файлы .dll и .exe напрямую. Это полезно для просмотра изменений заголовков и двоичных различий флагов, но не будет декомпилировать их для вас (поэтому используйте метод Reflector выше).