66

我想部署用 C# 完成的应用程序的发布版本。

当我使用配置构建时Release,我仍然可以看到.pdb文件已生成,这意味着我的应用程序仍然可以调试。这也意味着我的代码中的某处存在一些调试信息,从而减慢了它的速度。

如果这是真的,我怎样才能完全抑制二进制文件中产生的任何调试信息?你也知道释放的原因.pdb吗?配置ReleaseOptimize code检查,仅TRACE定义常量,未定义DEBUG.

谢谢你的帮助。

4

5 回答 5

108

如果要禁用 pdb 文件生成,则需要在单击选项卡下方的“按钮”"Advanced build settings"后使用项目属性中可用的对话框。"Advanced..."Build

设置Output - Debug info:None发布构建配置,不会生成任何 pdb 文件。

于 2010-03-03T12:14:01.973 回答
50

默认情况下也为发布版本生成 PDB。这是一项功能,您不应禁用它。生成 PDB 意味着您可以在调试时获得更多信息。PDB 文件的存在不会以任何方式影响代码的性能。

于 2010-03-03T12:16:38.490 回答
18

您不必将 .PDB 与您的发布部署一起发布,但它们对保留很有用 - 例如,您可以使用机器上的 PDB 远程调试在不同机器上运行的代码,以获取异常所在的行号发生。

如果不使用 .PDB,行号和文件名不包含在堆栈跟踪中,因此调试它们变得更加困难。

于 2010-03-03T12:17:53.280 回答
13

您可以在 Build -> Advanced... -> Debug info: 下的项目属性中控制 pdb / 符号生成。选项包括:

  • none(无符号信息)
  • 完整(将生成一个 .pdb,并在程序集中嵌入一些符号信息)
  • 仅限 pdb(将生成 .pdb 但程序集不受影响)

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/8cw0bt21%28VS.80%29.aspx

强烈建议您选择 pdb-only 选项,而不是none 选项,因为它仍然会为您提供一些符号信息而不影响程序集 - 您可能会发现这是您在发布版本中的当前设置。

于 2010-03-03T13:23:38.623 回答
7

让编译器生成.pdb文件与让它优化代码并不相互排斥。

有关此主题的更多信息,请阅读这些博客 条目

于 2010-03-03T12:12:43.520 回答