2016-08-24 2 views
1

Это немного гипотетический вопрос (в ожидании надлежащего расследования), но я считаю, что это может вызвать проблемы.WiX выборочное исправление и C#

Приложение C# содержит exe и некоторые DLL. Visual Studio/msbuild строит их немного по-разному на каждой сборке (обновленные временные метки/указатели/etc), но каждая сборка функционально идентична. Сервер сборки обрабатывает ежедневные/выпускные сборки для согласованности и разгрузки.

Уже выпущенный v1.0.0 с использованием WiX для упаковки и загрузки, я исправляю некоторые проблемы lib_1.dll и выпускаю v1.0.1. На этот раз я также создаю патч, который содержит только разницу lib_1.dll, чтобы сохранить размеры файлов. Все идет нормально.

Теперь забавная часть.

Я делаю дальнейшие изменения, но на этот раз до lib_3.dll и выпуском v1.0.2. Я делаю еще один патч, на этот раз включая только разницу для lib_3.dll. Итак, теперь исправление v1.0.0 до v1.0.1 работает, как и v1.0.1 - v1.0.2, но поскольку каждая сборка немного отличается, v1.0.0 - v1.0.1 - v1.0.2 либо сбой, либо в конечном итоге с поврежденными файлами из-за неправильной разницы. Гипотетически.

Итак, вопрос в том, как это можно решить? Есть ли простой способ управлять двоичными файлами, поэтому в инсталляторы включены только реальные изменения? Какой-то способ сравнения двоичных файлов, которые игнорируют изменения для каждой сборки? Или что-то другое?

ответ

0

Я поставил аналогичный вопрос here. Я не знаю, можно ли исправить ситуацию после того, как вы уже выпустили версию 1.0. Но, строя используя «детерминированную сборку», эти тонкие нефункциональные изменения в ваших DLL не будут случаться.

См. here и here для получения дополнительной информации. Но суть в том, что вам нужно передать флаг /deterministic компилятору или добавить <Deterministic>true</Deterministic> в группу свойств в файлах свойств MSbuild.

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