如何修补.NET程序集?

如果我两次编译一个C#项目,我会得到两个程序集。 这些程序集不完全相同(使用二进制差异)。 我可以想到为什么会这样,但事实仍然是两个组件的来源是相同的。

我担心在这些程序集之间创建补丁,并在客户机器上应用补丁。

有谁知道我可以创建和应用补丁的库(最好是.NET)或工具?

理想情况下,它还应该处理小的更改,例如更改项目级别的依赖项或调整源代码中的几行。 它不必能够处理更大的更改,因为我很乐意在这种情况下完全替换程序集。

更新

我认为更多的背景可能有助于澄清我所得到的。 我有一个持续集成服务器构建我的应用程序。 我更改文件和程序集版本以反映我正在构建的内部版本号和版本。 我可以用不同的方式完成它,但这是我喜欢的选项。

这会导致在构建应用程序时更改程序集引用,但我很满意。 我现在关注的是将更新分发给以前发布的版本。 我使用InstallShield构建更新。 InstallShield可用的程序集简化为小补丁。 这些不会大幅增加更新的大小。

我的应用程序有一些数据文件,基本上是包含程序集的加密存档。 InstallShield无权访问这些程序集或了解我的存档。 它不知道如何解密和提取它。 我编写了自己的补丁例程,它在先前的存档中找到已更改的文件,并用新的更新版本替换它们。 基本上是搜索和替换策略。

一个存档包含近百个(并且正在增长)这些程序集,其中一些程序集包含大型数据文件作为资源。 这些程序集依赖于作为应用程序一部分的程序集。 它们也在持续集成构建期间编译。 在构建期间不编译它们将留下依赖性问题的空间,我不愿意尝试管理它。 每次创建补丁时,都会包含所有这些程序集。 我现在正在寻找通过为这些程序集生成补丁来减少补丁大小的选项。

这不是.net但应该能够为您生成补丁文件 –

http://www.tibed.net/vpatch/

我曾经将它用于游戏和地图等,但它应该适用于任何两个文件。

我建议更换你的组件。 补丁一直有点问题 – 至少与替换相比。 汇编文件往往相当小,因此替换它们通常不是一项非常大的任务。

通常,如果源相同则组件发生变化的原因通常与少数事情之一有关。 您的项目可能已更改,但更可能的是,程序集的一个引用程序集已更改。 在这种情况下,您需要分发整套程序集,包括引用的程序集,否则您将在客户的计算机上遇到版本问题和破坏。

创建新的可安装程序通常比尝试修补计算机更简单,更安全。