2013-11-25 5 views
2

Я сравниваю это удостоверение, что 2 dll генерируются из одного источника. Поскольку я не мог использовать внешние инструменты для сравнения, я только что создал файлы IL с использованием дизассемблера IL и сравнения вручную.Сравнение DLL для подтверждения Если используется один и тот же исходный код

  • Для поля ниже в файле .il, количество такое же время как сравнения.

    // CLR method headers : 
    // Num.of method bodies - 
    // Num.of fat headers - 
    // Num.of tiny headers - 
    
    // Managed code : 
    // Ave method size - 
    
  • Порядок названий классов не совпадает с числом и именами одинаковы.

Можно ли с уверенностью предположить, что обе библиотеки DLL являются исходными кодами?

ответ

3

Невозможно это сказать.

Не только нет два скомпилирован библиотек такой же из-за the MVID and other properties that differ each time you compile: две сборки, содержащие одинаковое количество методов ничего не сказать:

  • реализация методов может отличаться (например, v1-х Foo() метод содержит return true, в то время как v2's Foo() содержит return false)
  • Разный исходный код может давать тот же IL.

Похоже, что у вас есть совершенно другая проблема, которую вы хотите решить, например, обучение вашей команды и использование непрерывной интеграции для совместного использования сборок, скомпилированных на сервере сборки. Если вы можете объяснить , почему вы хотите, чтобы две библиотеки DLL были скомпилированы из одного источника, возможно, могут быть даны некоторые более точные ответы.

+0

Спасибо. Код, который я в настоящее время изменяю, берется из среды репозитория кода и dll из среды diff. В течение нескольких лет никаких изменений в коде/dll не происходило и, следовательно, не удалось сразу отслеживать процесс развертывания. Так что вам нужно подтвердить DLL и код из репозиторий синхронизированы. – Krishna

+0

Несмотря на то, что вы приняли этот ответ, я буду настаивать на том, что допустимое сравнение с помощью ILSpy возможно, поэтому попробуйте его, это должно помочь –

1

Я думаю, вы можете попробовать следующее -

  1. попробовать ILSpy для сборки браузера с открытым исходным кодом и декомпилятора и сравнить с # сгенерированным кодом.
  2. запускать тестовые примеры против классов в сборке и проверять, являются ли результаты одинаковыми.
8

Вы можете использовать ILSpy, чтобы декомпилировать обе библиотеки DLL. Используйте Сохранить код ... вариант для обеих библиотек, поэтому вы можете сохранить его как полный проект Visual Studio (csproj). Тогда простой WinMerge (с рекурсией) в обоих каталогах покажет вам все различия в исходном коде.

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

+0

Функция сравнения папок Compare Beyond может быть хорошим способом сравнить обе папки после декомпиляции и сохранить код. – TheCrazyProgrammer

 Смежные вопросы

  • Нет связанных вопросов^_^