题
要求:
- 免费,最好是开源的
- 在 .NET 托管语言之一中实现
谷歌找到了这些:
- 通用,可重复使用的差异算法 在代码项目上
- C# 的 O(ND) 差分算法
- C#/.NET 的差异/合并/补丁库 作者:约书亚·陶伯勒
编辑:
没有应用程序,只有图书馆。
解决方案
你可以抢 使用 Google 的 Diff/Patch/Match 的 COM 组件. 。它在 .NET 上运行。
更新,2010 年 10 月 17 日: :这 Google 差异/补丁/合并代码 已移植到C#。COM 组件仍然可以工作,但如果您来自 .NET,您将希望直接使用 .NET 端口。
其他提示
我认为 Codeproject 上的“Generic - Reusable Diff Algorithm in C#”是您能找到的最好的用于 diff/patch/merge 的 .NET 引擎。我自己用它做了一个项目,它符合我的大多数场景的需求。当算法使补丁文件大于其必须的大小时,会出现一两种最坏的情况。但在大多数情况下,它对我来说效果很好(文本文件大小> 30 MB)。
我目前正在测试另一个 Codeproject-Project,您可以在这里找到: http://www.codeproject.com/KB/applications/patch.aspx它使用了 Microsoft 的一些 DLL 来进行修补,因此看起来很有趣。但这些 DLL 是非托管的,这个项目只是它的某种包装。但也许它可以帮助你
编辑:刚刚找到另一个项目, 差异复合体: http://diffplex.codeplex.com/它是 .NET Diffing 库与 Silverlight 和 HTML diff 查看器的组合. 。就像声明的那样 那里, DiffPlex 是 CodePlex 用于生成文件差异的库。
GitSharp 包含一个基于 meyers diff 的 diff 引擎。看一下演示,它实现了一个基于 Diff.Sections 集合的简单 wpf diff 查看器: http://www.eqqon.com/index.php/GitSharp#GitSharp.Demo
到目前为止,没有一个答案(可能除了 GitSharp 参考)涉及 3 路合并,因此,如果它可以帮助任何人,我最近移植了 Tony Garnock-Jones 的 javascript diff3 实现(来自 同步加速器 项目,基于 Hunt 和 McIlroy 1976)到 C#。
这是 diff 和三向合并方法的简单单文件端口,但它是标准算法,到目前为止对我来说效果很好: https://gist.github.com/2633407