【问题标题】:Is there a way to diff two .NET executables?有没有办法区分两个 .NET 可执行文件?
【发布时间】:2012-07-09 23:00:53
【问题描述】:

我们最近有一位开发人员离开了我们的组织。我们不确定他放在生产服务器上的可执行文件的版本是否与当前在 TFS 中的版本相同。有什么方法(除了使用 Just Compile 或 ILDASM 之类的东西)从 TFS 构建项目并将该可执行文件与我们生产服务器上当前的可执行文件进行比较?

更新:我正在尝试 Just Decompile,并且我已经加载了两个二进制文件,所以我正在逐步检查每个命名空间、成员等,以将它们相互比较。我习惯于在 Visual Studio 中使用架构比较来比较 2 个数据库的架构,并查看更新、删除和添加的项目,并突出显示差异。是否有一些工具可以获取这两个反编译的二进制文件并以某种方式突出差异?

【问题讨论】:

  • 您是否要求在 TFS 中进行比较然后构建?
  • 不,我在 TFS 中有一个项目,并且我有一个前段时间从该项目构建的可执行文件。我需要查看我从 TFS 构建的版本是否与已在生产中的编译版本相同。
  • 有一个名为 File Disassembler for Reflector 的插件,可以将整个程序集反编译成其源代码。您可以对已编译的程序集执行此操作,并对输出进行文本差异。或者,如果您在 TFS 中的代码应该是部署到生产服务器的代码,只需再次部署即可。
  • 可能duplicate
  • @Nathan 认为您是正确的,但不确定接受的答案是否肯定会对两个程序集进行哈希处理,我想到了这种方法,但因为您不能保证程序集每次都编译相同... ...

标签: c# .net visual-studio-2010 disassembly


【解决方案1】:

目前我只能想到这个办法:

  1. 使用dotPeek 反编译实时程序集
  2. 使用dotPeek 反编译从 TFS 新构建的相同程序集
  3. 对两个反编译的源代码使用 Beyond Compare 之类的工具
  4. 根据需要合并更改

希望这就是您要找的东西??

在版本控制方面可能对未来有益的其他阅读材料,以便您了解哪些 dll 包含哪些功能(可能对您有用也可能无用,如果我告诉您一些显而易见的事情,请原谅我):

Best practices/guidance for maintaining assembly version numbers

祝你好运

【讨论】:

  • 嘿,dotPeek 很酷!以前没听说过,为什么不呢?无论如何,为此 +1。
  • @Cyber​​herbalist:谢谢 :)
【解决方案2】:

是的,使用 NDepend 您可以区分两个 .Net 程序集。尽管即使两次编译完全相同的源代码也不会生成完全相同的程序集。

【讨论】:

  • 也许你应该解释一下为什么同一个源可以生成不同的程序集。
  • Eric Lippert 在他的博客上详细解释了这一点。 blogs.msdn.com/b/ericlippert/archive/2012/05/31/…
  • 我刚刚使用了 NDepend 并在其中打开了 2 个版本的相关二进制文件。在生成的代码差异报告中,它没有显示任何差异,因此我将使用它来比较 2 个已知的不同程序集,以确保它确实发现了差异。这样我就知道我可以信任输出了。
  • 这是不可靠的我不推荐它我无法让它向我展示代码之间的真正差异......
  • @DanielKmak 请回到我们这里,我们有成千上万的用户成功使用了这个功能,请在此处查看相关文档ndepend.com/docs/code-diff-in-visual-studio
【解决方案3】:

我们用于详细比较(包括二进制文件比较)的产品是Beyond Compare。当我们第一次拿到这个产品时,我认为它的用途有限,但它帮助我们解决了一些非常棘手的问题。它比较目录、文本文件、二进制文件、mp3、图片和软件版本。也不是特别贵。

我刚刚在 Release 和 Debug 中针对应用程序的二进制文件运行了该产品,它突出显示了每个差异。

我确信您可以针对两个二进制文件运行 ILDASM 并进行眼球比较,但这样的工具可能会一遍又一遍地为自己付出代价。

【讨论】:

  • Beyond Compare +1,我将它用于我所有的提交,它真的很棒。
  • 两个 c# 程序集肯定会有所不同,Beyond compare 无法帮助您找出二进制文件中的差异是否有意义。
  • 为什么不呢,@DeniseSkidmore?也许并非总是如此,但是您不需要能够将二进制理解为母语即可从二进制比较中受益。就像我说的,事实证明,能够看到二进制差异的程度对我很有用。例如,文本字符串确实出现在二进制文件中,这是一个事实。
  • 在二进制比较有用之前需要了解二进制文件的结构。
  • @DeniseSkidmore 我发现二进制比较偶尔有用,但不知道二进制文件的结构。你说它从来没有用与我的经验相矛盾,你猜怎么着?我的经历胜过你的看法。至少对我来说。祝你今天过得愉快!非常感谢声誉受到打击。你真可爱。
猜你喜欢
  • 1970-01-01
  • 2018-06-10
  • 2010-11-29
  • 1970-01-01
  • 1970-01-01
  • 2020-08-20
  • 2022-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多