先前版本的较旧 PDB 是否会与未从先前版本更改的较新版本的 DLL 相匹配?

Will older PDBs of previous releases match with the DLLs of newer releases that haven't been changed from the previous release?

所以我们公司正在构建一个.NET项目,它需要我们保存每个版本的PDB,以备将来调试之用。我们有这个想法来优化space的要求。我们没有将所有 PDB 存储在较新的版本中,而是考虑仅存储来自先前版本的已修改 DLL 的 PDB,然后从先前的存档中检索未更改的 PDB。那么仅存储修改后的 DLL 的 PDB 是否可行,未更改 DLL 的 PDB 是否会匹配构建后更新的 DLL?

我在网上看到一篇文章,说DLL和PDB之间会生成一个唯一的GUID来判断匹配。这个 GUID 对于每个构建都是唯一的吗? (即使对于未更改的 DLL)

您的问题的答案是否定的。dll 及其相应的 pdb 通过时间戳和校验和(或类似的)链接在一起。每个新构建都会创建新的 pdb,它们不会匹配旧的(并且 VS 不会接受它们作为匹配)。请注意,同一 dll 的任何两个构建都将是二进制不同的,即使源代码根本没有更改,因为它们还包含时间戳和类似的动态信息。

不,它不会起作用。此外,即使可以,也有一个严重的缺点,即当程序员必须检索 PDB 进行调试时,它会引入额外的工作和潜在的错误。

最后,根据您的月度估算,仅增加 240 GByte space 10 年。这是不值得的努力。想一想:假设一个程序员会工作几个小时来编写、测试和部署脚本或类似的东西来保存 space(使用另一种方法)。硬盘可能比付钱便宜。

也许可以在 NTFS 级别启用压缩,这可以节省更多 space 并且几乎不需要任何设置工作。