如何自动检测和发布真正改变的DLL?

无论何时我们重新编译一个exe或一个DLL,即使源代码是相同的,由于图像中的各种时间戳和校验和,它的二进制图像也是不同的。

但是,我们的质量体系意味着每次发布新的DLL时,必须再次执行相关的validationtesting(通常是手动的,而且需要大量的时间)。

所以,我们的目标是避免发布实际上没有改变的DLL。 即:有一个自动的程序(脚本,工具,无论…),只检测不同的Dll,只包含有意义的信息(代码和数据),忽略时间戳和校验和。

有没有一个很好的方法来实现这一目标?

根据版本信息进行分类,只有在实际进行更改时才更新版本信息。

让您的构建工具构建DLL两次。 两者之间的差异保证是时间戳或校验和的结果。 现在你可以使用这些信息来比较你的下一个版本。

如果您有一个自动构建系统在开始构建之前同步源代码,那么只有在源代码管理发生任何实际更改的情况下才能继续构建和发布。 您应该能够从源代码管理客户端的输出中轻松检测到这一点。

我们的构建系统也有同样的问题。 不幸的是,检测是否有任何重大的代码更改是不平凡的,因为我们有许多静态库,所以更改为一个可能会导致DLL / EXE改变。 对dll / exe直接使用的文件所做的更改可能只是修复了一个错误的注释,而不是更改生成的目标代码。

我以前看过一个工具来做你想做的事情,我没有看到一个。 我的想法是手动比较这两个文件,并跳过两个版本中无意义的差异。 便携式文件格式是有据可查的,所以我不认为这是非常困难的。 我们的要求额外的要求,我们忽略的版本加入到DLL / EXE,因为我们唯一的邮票我们的所有文件,也忽略签署,因为我们签署所有我们的可执行文件。

我还没有时间去做这些事情,但是如果你继续实施一个解决方案,我会有兴趣与你合作。 如果你确实找到了一个这样的工具,请让我们知道。