【问题标题】:Is there any way to check whether a code change altered the binary?有没有办法检查代码更改是否改变了二进制文件?
【发布时间】:2012-09-14 19:39:30
【问题描述】:

我假设如果 C# 代码不变,则每次构建生成的 IL 将是相同的。问题是由相同代码生成的 2 个 EXE 文件没有相同的哈希值。

我想检查代码样式的更改是否会生成不同的 IL。我怎样才能做到这一点?

【问题讨论】:

  • 每次构建时都会生成不同的二进制文件,即使代码相同(构建会生成嵌入在程序集中的 GUID,每次编译都会不同)。
  • 如果您解释为什么您希望更改代码样式以生成不同的 IL,我们可能会提供帮助。
  • @DourHighArch 我没有,我想向自己保证没有任何改变。

标签: c# .net visual-studio-2010 msbuild il


【解决方案1】:

你做了一个错误的假设。无需更改代码的重建将提供不同的二进制文件。

见:

https://stackoverflow.com/a/8927785/426894

每次运行编译器时,都应该得到不同的输出。

http://blogs.msdn.com/b/ericlippert/archive/2012/05/31/past-performance-is-no-guarantee-of-future-results.aspx

编译同一个 C# 程序两次保证产生相同的结果 二进制输出?

没有。

【讨论】:

    【解决方案2】:

    您可以使用一些工具来反汇编 EXE 并比较它们的内容。看这个博客http://immitev.blogspot.com.br/2008/10/ways-to-compare-net-assemblies.html

    []的

    【讨论】:

    • 顺便说一下,Telerik 的 JustDecompile(另一个反汇编程序)站点上有一个功能建议可以满足您的需求。我对此进行了投票,让我们帮助它获得开发人员的关注:justdecompile.uservoice.com/forums/…
    【解决方案3】:

    您可以使用ILSpy,这是一个开源的 .NET 程序集浏览器和反编译器。

    【讨论】:

      猜你喜欢
      • 2017-10-01
      • 2013-08-30
      • 2010-09-18
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      • 2013-01-15
      • 2020-08-29
      • 2020-11-25
      相关资源
      最近更新 更多