C# 有没有办法区分两个.NET可执行文件?

C# 有没有办法区分两个.NET可执行文件?,c#,.net,visual-studio-2010,disassembly,C#,.net,Visual Studio 2010,Disassembly,我们最近让一位开发人员离开了我们的组织。我们不确定他放在生产服务器上的可执行文件的版本是否与TFS中当前的版本相同。是否有任何方法(除了使用诸如Just Compile或ILDASM之类的工具)从TFS构建项目,并将该可执行文件与当前生产服务器上的可执行文件进行比较 更新:我正在尝试反编译,并且我已经加载了两个二进制文件,所以我正在逐步遍历每个名称空间、成员等,以便将它们相互比较。我习惯于在VisualStudio中使用Schema Compare来比较两个数据库的模式,并查看更新、删除和添加的

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


更新:我正在尝试反编译,并且我已经加载了两个二进制文件,所以我正在逐步遍历每个名称空间、成员等,以便将它们相互比较。我习惯于在VisualStudio中使用Schema Compare来比较两个数据库的模式,并查看更新、删除和添加的项目以及突出显示的差异。难道没有什么工具可以使用这两个反编译的二进制文件并以某种方式突出它们之间的差异吗?

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

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


我相信您可以对两个二进制文件运行ILDASM并进行直观的比较,但像这样的工具可能会一次又一次地为自己买单。

现在我只能想到这种方法:

  • 用于反编译活动程序集
  • 用于反编译新从TFS生成的相同程序集
  • 在两个反编译源上使用类似Beyond Compare的工具
  • 根据需要合并更改
  • 希望这就是你想要的

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


    祝您好运

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

    您是否要求在TFS中找到一种比较然后生成的方法?不,我在TFS中有一个项目,我在一段时间以前就从该项目中生成了一个可执行文件。我需要看看我从TFS生成的版本是否与已在生产中的编译版本相同。有一个名为File Discombler for Reflector的插件,可以将整个程序集反编译为其源代码。您可以对两个编译的程序集执行此操作,并对输出执行文本差异。或者,如果您在TFS中的代码应该是部署到生产服务器上的代码,只需再次部署即可。可能@Nathan认为您是正确的,但不确定接受的答案是否一定能对两个程序集进行哈希运算,我想到了这种方法,但你不能保证程序集每次编译都是一样的……+1因为无法比较,我在所有的提交中都使用它。这真是太棒了。两个c#程序集肯定会不同,无法比较不能帮助你发现二进制文件中的差异是否有意义。为什么不,@Deniseskimore?也许并不总是这样,但您不需要将二进制理解为一种母语,就可以从二进制比较中获益。正如我所说,能够看到二进制差异的程度对我来说很有用。例如,文本字符串确实出现在二进制文件中,这是一个事实。在二进制比较有用之前,它需要了解二进制文件的结构。@Deniseskimore我发现二进制比较偶尔有用,而不知道二进制文件的结构。你说这根本没用和我的经验相矛盾,你猜怎么着?我的经验胜过你的意见。至少对我来说。祝您有个美好的一天!非常感谢你的名声受到打击。你真可爱。也许你应该解释一下为什么同一个源可以生成不同的程序集。Eric Lippert在他的博客上详细解释了这一点。我刚刚使用了NDepend并在其中打开了2个版本的二进制文件。在生成的代码差异报告中,它没有显示任何差异,因此我将使用它来比较两个已知的不同程序集,以确保它确实发现了差异。这样我知道我可以信任输出。这是不可靠的,我不建议使用它,我无法让它显示代码之间的真正差异…@DanielKmak请回到我们这里,我们有成千上万的用户成功地使用了这一功能,请看这里的相关文档嘿,dotPeek很酷!以前从没听说过,为什么不呢?无论如何,@Cyberherbalist:谢谢:)