obj/Debug 中的 .pdb 文件是否应该添加到源代码管理中?

Should .pdb files from obj/Debug be added to source control?

关于处理 .pdb 文件的最佳实践,网络上存在一些相互矛盾的信息,如果您能提供说明,我将不胜感激。

例如,this source says that "PDB files are as important as source code", while this 表示 .pdbs 不属于源代码管理。

  1. 在正常开发(调试模式)期间构建生成的 .pdb 文件是否应该提交给源代码管理?
  2. 是否只应将用于 release/production 的 .pdb 文件存储在源代码管理中?

我希望第一个问题的答案是 "no",第二个问题的答案是 "yes",但我可能遗漏了什么。

请参阅 this post。您不需要将 *.pdb 文件添加到源代码管理。这些文件是在您启动新的调试会话时生成的。

PDB 文件不应进入源代码管理。它们是构建工件的一部分,应该与构建的输出一起保存(而不是在构建后丢弃)。应保留历史构建并跟踪当前发布的部署版本,因此如果需要,您可以从相应的存档构建中提取 PDB。

除了 Craig W. 的正确答案:

除了源代码控制系统(例如svn/git),您还应该使用构建系统来存档任何构建。

Jenkins 是一个不错的构建系统,它是一个安静且易于理解的构建系统,具有我期望的所有功能。如果你分发你的软件,你登录到 jenkis 并点击 "build now"。然后 Jenkins 从 svn/git 中检出当前版本并构建您的软件(使用批处理)并保存所有文件,包括 debug/symbol 文件。 jenkins 每次都应该增加二进制文件的内部版本号,并且内部版本号应该设置到二进制文件(dll 和 exe)中。在崩溃时,您会在事件查看器中看到版本,并且可以从崩溃的版本中获取所有文件,包括源文件。

我还建议将 jenkins 内部版本号写入二进制文件。因此,您始终可以登录 jenkins select 内部版本号,然后获取所有调试文件,并在日志中查看它是从哪个 svn 版本构建的(因此您也可以签出正确的源代码)。对于版本控制 dll 或 exe 文件,您可以使用(在 .net 中使用脚本编辑配置文件):http://www.codeproject.com/KB/install/VerPatch.aspx?msg=3207401 并将其集成到构建批处理中。

在这里你可以找到詹金斯:https://jenkins-ci.org/