如何自动检测和释放真正改变的DLL?

时间:2009-04-20 21:43:54

标签: windows binary release compare

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

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

因此,我们的目标是避免发布尚未实际更改的DLL。即:拥有一个自动程序(脚本,工具,等等......),它只根据它们包含的有意义信息(代码和数据)检测不同的Dll,忽略时间戳和校验和。

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

4 个答案:

答案 0 :(得分:1)

基于版本信息,只在实际进行更改时更新版本信息。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

我们的构建系统存在同样的问题。不幸的是,由于我们有许多静态库,因此检测是否存在任何重大代码变化并非易事,因此更改为一个可能会导致dll / exe发生变化。对dll / exe直接使用的文件的更改可能只是修复错误的注释,而不是更改生成的目标代码。

我之前看过一个工具来做你想做的事,但我没有看到。我的想法是手动比较两个文件并跳过两个版本中没有意义的差异。 Portable File Format已有详细记载,因此我不认为这非常困难。我们的要求附加要求我们忽略标记在dll / exe中的版本,因为我们对所有文件进行了唯一标记,并且在我们签署所有可执行文件时也忽略了签名。

我还没来得及做任何这些,但如果您继续实施解决方案,我有兴趣与您合作。如果您确实找到了这样做的工具,请告诉我们。