背景:
我被指控试图想出一种比较使用AssemblyInfo来嵌入版本号的dll和exes的新方法。每次我们进行新构建时,版本都会相应增加。但是,当部署新版本时,我们只想复制已实际更改的dll和exes,但嵌入的版本号似乎总是如此。
为了解决这个问题,系统目前只依赖于比较文件大小,但是我的任务是从注意到这看起来不够好,因为我们无法部署新的exe,尽管它已经改变了;他们碰巧有相同的文件大小。我们不知道这种情况发生的频率,所以我们需要对此做些什么,但如果可能的话,我们仍然希望能够更换dll和exes,这样用户就不会每次都被迫关闭UI我们真的只需要替换UI不使用的文件。
因此,我的问题是,是否有一种聪明的方法来比较使用AssemblyInfo的嵌入式版本的exes和dll,而忽略了元数据本身。看起来越多,看起来这似乎越不可能,但我认为在放弃并切换到每次更换所有内容之前都值得询问。
感谢帮助!
编辑:我想我真的希望有一件事可能是与某些偏移进行逐位比较。 AssemblyInfo是否总是在特定点编译,例如作为比较中可以考虑的排序的页眉或页脚?
答案 0 :(得分:3)
Eric Lippert already covered this:
两次编译相同的C#程序是否保证产生相同的二进制输出?
第
嗯,这是一个很容易写的博客 ...
设计的C#编译器永远不会产生两次相同的二进制文件。每次运行时,C#编译器都会在每个程序集中嵌入一个新生成的GUID,从而确保没有两个程序集一点一点地相同
答案 1 :(得分:2)
不要更新所有文件中的版本号。而是仅更新已更改的特定文件中的版本。这需要在构建过程中进行一些更改,但它会解决您的问题。