2

背景:

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

为了解决这个问题,系统目前只是依靠比较文件大小,但我的任务是注意到这似乎不够好,因为尽管它发生了变化,但我们未能部署新的 exe;他们只是碰巧有相同的文件大小。我们不知道这种情况发生的频率有多高,所以我们需要对此做一些事情,但如果可能的话,我们希望在替换 dll 和 exe 方面仍然很聪明,这样用户就不会每次都被迫关闭 UI我们真的只需要替换 UI 不使用的文件。

因此,我的问题是,是否有一种聪明的方法可以通过使用 AssemblyInfo 将 exe 和 dll 与嵌入式版本进行比较,同时忽略元数据本身。我环顾四周越多,似乎这可能是不可能的,但我认为在放弃并切换到每次更换所有东西之前都值得一问。

感谢帮助!

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

4

2 回答 2

3

Eric Lippert已经介绍过这个

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

于 2012-10-31T14:42:26.717 回答
2

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

于 2012-10-31T14:34:25.883 回答