3

每当我们重新编译一个 exe 或一个 DLL 时,即使源代码相同,它的二进制映像也是不同的,因为映像中存在各种时间戳和校验和。

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

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

有没有好的方法来实现这一点?

4

4 回答 4

1

以版本信息为基础,仅在您实际进行更改时更新版本信息。

于 2009-04-20T21:46:06.943 回答
1

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

于 2009-04-20T21:49:24.483 回答
1

我们的构建系统也有同样的问题。不幸的是,检测是否有任何实质性代码更改并非易事,因为我们有许多静态库,因此对其中的更改可能会导致 dll/exe 更改。对 dll/exe 直接使用的文件的更改可能只是修复错误注释,而不是更改生成的目标代码。

我之前一直在寻找一种工具来做你想做的事,但我没有看到。我的想法是手动比较这两个文件并跳过两个版本中无意义的差异。便携式文件格式有据可查,所以我不认为这会非常困难。我们的额外要求要求我们忽略标记在 dll/exe 中的版本,因为我们对所有文件进行唯一标记,并且在签署所有可执行文件时也忽略签名。

我还没有时间来做这些,但如果你继续实施解决方案,我很想与你合作。如果您确实找到了执行此操作的工具,请告诉我们。

于 2009-04-21T01:17:39.647 回答
1

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

于 2009-04-20T21:53:43.803 回答