Кто-нибудь знает, как сравнить две сборки .NET, чтобы определить, были ли они созданы из "одинаковых" исходных файлов?
Я знаю, что есть некоторые доступные утилиты для разнесения, такие как плагин для Reflector, но мне не интересно просматривать различия в графическом интерфейсе, я просто хочу автоматизированный способ сравнить коллекцию двоичных файлов, чтобы узнать, были ли они построенных из тех же (или эквивалентных) исходных файлов. Я понимаю, что несколько разных исходных файлов могут создавать один и тот же IL и понимать, что процесс будет чувствителен только к различиям в IL, а не в исходном источнике.
Основным препятствием для простого сравнения потоков байтов для двух сборок является то, что .NET включает в себя поле под названием "MVID" (идентификатор версии модуля) сборки. Для каждой компиляции это значение имеет другое значение, поэтому, если вы создадите один и тот же код дважды, сборка будет отличаться.
Связанный вопрос: кто-нибудь знает, как заставить MVID быть одинаковым для каждой компиляции? Это позволит нам избежать процесса сравнения, который нечувствителен к различиям в значении MVID. Согласованный MVID был бы предпочтительнее, так как это означает, что могут использоваться стандартные контрольные суммы.
Основой этого является то, что сторонняя компания несет ответственность за независимое рассмотрение и отключение наших выпусков до того, как нам разрешат выпустить в Production. Это включает в себя проверку исходного кода. Они хотят самостоятельно подтвердить, что исходный код, который мы им даем, соответствует двоичным файлам, которые мы ранее построили, протестировали и в настоящее время планируем развернуть. Мы ищем процесс, который позволяет им самостоятельно строить систему из источника, который мы им поставляем, и сравнивать контрольные суммы с контрольными суммами для тестируемых двоичных файлов.
BTW. Обратите внимание, что мы используем непрерывную интеграцию, автоматические сборки, контроль источника и т.д. Проблема не связана с внутренним отсутствием контроля над исходными файлами в данной сборке. Проблема в том, что третья сторона несет ответственность за проверку того, что источник, который мы им предоставляем, производит те же бинарные файлы, которые мы тестировали, и планируем ввести в Production. Они не должны доверять ни одной из наших внутренних систем или элементов управления, включая сервер сборки или систему управления исходным кодом. Все, о чем они заботятся, это получение источника, связанного с сборкой, выполнение самой сборки и проверка того, что результаты соответствуют тому, что мы говорим, мы развертываем.
Скорость выполнения решения сравнения не имеет особого значения.
спасибо