如何修补.NET程序集?

时间:2009-08-17 16:11:05

标签: c# .net assemblies

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

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

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

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

更新

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

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

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

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

2 个答案:

答案 0 :(得分:12)

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

通常,如果源相同,程序集更改的原因通常与少数事情之一有关。您的项目可能已更改,但更可能的是,程序集的一个引用程序集已更改。在这种情况下,您需要分发整套装配,包括引用的装配,否则您将在客户的机器上出现版本问题和破损。

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

答案 1 :(得分:3)

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

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

我以前用它来游戏和地图e.t.c.但它应该适用于任何两个文件。