按位比较.exe和.dll与AssemlyInfo.cs

时间:2012-10-31 14:26:28

标签: c# dll comparison exe assemblyinfo

背景:

我被指控试图想出一种比较使用AssemblyInfo来嵌入版本号的dll和exes的新方法。每次我们进行新构建时,版本都会相应增加。但是,当部署新版本时,我们只想复制已实际更改的dll和exes,但嵌入的版本号似乎总是如此。

为了解决这个问题,系统目前只依赖于比较文件大小,但是我的任务是从注意到这看起来不够好,因为我们无法部署新的exe,尽管它已经改变了;他们碰巧有相同的文件大小。我们不知道这种情况发生的频率,所以我们需要对此做些什么,但如果可能的话,我们仍然希望能够更换dll和exes,这样用户就不会每次都被迫关闭UI我们真的只需要替换UI不使用的文件。

因此,我的问题是,是否有一种聪明的方法来比较使用AssemblyInfo的嵌入式版本的exes和dll,而忽略了元数据本身。看起来越多,看起来这似乎越不可能,但我认为在放弃并切换到每次更换所有内容之前都值得询问。

感谢帮助!

编辑:我想我真的希望有一件事可能是与某些偏移进行逐位比较。 AssemblyInfo是否总是在特定点编译,例如作为比较中可以考虑的排序的页眉或页脚?

2 个答案:

答案 0 :(得分:3)

Eric Lippert already covered this

  

两次编译相同的C#程序是否保证产生相同的二进制输出?
  第
  嗯,这是一个很容易写的博客   ...
  设计的C#编译器永远不会产生两次相同的二进制文件。每次运行时,C#编译器都会在每个程序集中嵌入一个新生成的GUID,从而确保没有两个程序集一点一点地相同

答案 1 :(得分:2)

不要更新所有文件中的版本号。而是仅更新已更改的特定文件中的版本。这需要在构建过程中进行一些更改,但它会解决您的问题。