WiX 选择性修补和 C#

WiX selective patching and C#

这是一个有点假设性的问题(有待适当调查),但我相信它可能会导致问题。

C# 应用程序包含一个 exe 和一些 dll。 Visual Studio/msbuild 在每次构建时构建它们的方式略有不同(已更新 timestamps/guids/etc),但每个构建在功能上都是相同的。构建服务器处理 daily/release 构建以保持一致性并卸载工作。

已经发布了使用 WiX 打包和 bootstrap 的 v1.0.0,我修复了一些问题 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 要么失败要么以损坏的文件结束由于不正确的差异。假设。

所以问题是:如何解决这个问题?有没有一种简单的方法来管理二进制文件,以便安装程序中只包含真正的更改?比较忽略每次构建更改的二进制文件的某种方法?或者别的什么?

我发布了一个类似的问题。我不知道一旦你已经发布了 1.0 版本,这种情况是否可以得到纠正。但是通过使用 'Deterministic build' 构建,这些对您的 dll 的细微非功能性更改将不会发生。

有关详细信息,请参阅 here and here。但它的要点是您需要将参数 /deterministic 标志传递给编译器或将 <Deterministic>true</Deterministic> 添加到 MSbuild 属性 文件中的 属性 组。