Сравнение продуктов сборок в выпуске - PullRequest
4 голосов
/ 26 ноября 2008

Мне нужно сравнить выходные данные сборки VS2005, чтобы убедиться, что я могу воспроизвести точно такой же продукт.

когда я делаю две сборки одна за другой в выпуске и сравниваю полученные файлы, я получаю разные файлы, сравнивая текст, кажется, что отличается не только дата и время

как я могу построить, чтобы каждый раз воспроизводить один и тот же продукт?

Ответы [ 3 ]

7 голосов
/ 26 ноября 2008

Всякий раз, когда вы собираете, компилятор встраивает:

  • Дата и время
  • GUID (используется для отладки и т. Д., Я полагаю)
  • Потенциально версия сборки (которая может иметь "1.2.3. *" И заполняться автоматически)
  • Потенциально сильный хеш

Пара вариантов:

  • Выясните, где "файлы, как известно, отличаются несущественно", сотрите эти байты, а затем сравните
  • Используйте ildasm, чтобы преобразовать сборки в текст, а затем сравнить эти результаты. (Я не проверял, выявляет ли это тоже различия - это может произойти, и в этом случае вам снова придется явно игнорировать определенные разделы)

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

0 голосов
/ 26 ноября 2008

На самом деле вы можете использовать DumpBin для бинарного сравнения различных сборок, которые игнорируют вариации для каждой сборки. См. Как сравнить двоичные образы сборок того же проекта . В статье говорится, что она применима только до Visual Studio 6, поэтому я не уверен, что она будет работать в 2005 году или после.

0 голосов
/ 26 ноября 2008

Один вопрос: вы сделали текст сравнение для двоичных результатов сборки? Как я знаю, большинство компиляторов никогда не выдают двоичные идентичные выходные данные для одного и того же проекта. Компилятор кодирует в двоичное время компиляции, специальный порядковый номер и т. Д.

...