C# 从c中反汇编代码#

C# 从c中反汇编代码#,c#,build,disassembly,C#,Build,Disassembly,为了改进构建和部署例程,我希望比较两个不同程序集的代码。我无法比较文件大小和创建日期,也无法比较程序集的二进制内容,因为即使程序集在逻辑上相同,它们也可能不同 在以前的项目中,我使用了ildasm.exe并为每个程序集生成了一个文本文件,并在稍作修改后对其进行了比较,但我宁愿在c#代码中这样做,而不运行Process.Start() 举个例子,我希望这样做: public bool AssemblyComparer(string path1, string path2) { var te

为了改进构建和部署例程,我希望比较两个不同程序集的代码。我无法比较文件大小和创建日期,也无法比较程序集的二进制内容,因为即使程序集在逻辑上相同,它们也可能不同

在以前的项目中,我使用了ildasm.exe并为每个程序集生成了一个文本文件,并在稍作修改后对其进行了比较,但我宁愿在c#代码中这样做,而不运行Process.Start()

举个例子,我希望这样做:

public bool AssemblyComparer(string path1, string path2)
{  
  var text1 = MagicLibrary.Disassemble(path1);
  var text2 = MagicLibrary.Disassemble(path2);
  return text1.Equals(text2);
}

任何关于如何执行此操作的建议都将不胜感激。

我没有使用过它,但据我所知,Mono.Cecil是一个库,您可以使用它从程序集中检查程序中的IL代码。看见但我认为它并不像您希望的那样易于在代码片段中使用。

程序集的二进制内容,因为即使程序集在逻辑上相同,它们也可能不同。
我不明白这一点?整个word都在使用版本。为什么要比较内容?二进制内容包含程序集编译时的时间戳,因此即使它们在逻辑上相同,也没有相同的校验和。假设生成生成程序集a、B和C。用户检查对程序集a的更改,但B和C仍然生成。因此,如果我想对部署到的环境产生尽可能小的影响,我只想部署程序集A。为了确定B和C是否与allready部署的程序集不同,我不能使用二进制比较,因为从技术上讲,在不同的时间构建不同的程序集。但是部署它们会浪费资源,因为它们不代表更改。@Sinatr版本在处理多个分支时没有意义。在其他分支中,v3.1可能比v3.1旧或新。谢谢,我将对此进行研究。我添加了这个片段以阐明我的目的。我相信我可以处理稍微复杂一点的代码:)@snore不想暗示你不能:)