C#发行版仍有.pdb文件

C#发行版仍有.pdb文件,c#,pdb-files,release-mode,C#,Pdb Files,Release Mode,我想部署我的应用程序的发布版本,该版本是用C#完成的 当我使用Releaseconfig构建时,我仍然可以看到.pdb文件被生成,这意味着我的应用程序仍然可以调试。这也意味着一些调试信息出现在我的代码中的某个地方,使它慢了一点 如果这是真的,我怎样才能完全抑制二进制文件中产生的任何调试信息?您还知道发布.pdb的原因吗?Release配置选中了Optimize code,并且只定义了跟踪常量,而不是DEBUG 感谢您的帮助。让编译器生成一个。pdb文件与让它优化代码并不是相互排斥的 有关此主题的

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

当我使用
Release
config构建时,我仍然可以看到
.pdb
文件被生成,这意味着我的应用程序仍然可以调试。这也意味着一些调试信息出现在我的代码中的某个地方,使它慢了一点

如果这是真的,我怎样才能完全抑制二进制文件中产生的任何调试信息?您还知道发布
.pdb
的原因吗?
Release
配置选中了
Optimize code
,并且只定义了
跟踪
常量,而不是
DEBUG


感谢您的帮助。

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


有关此主题的详细信息,请阅读这些。

如果要禁用pdb文件生成,请在单击
生成
选项卡下部的
高级…
按钮后,使用项目属性中可用的
高级生成设置
对话框


将发布版本配置的
Output-Debug info:
设置为
None
,不会生成pdb文件。

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

您不必在发布部署中附带.PDB,但它们很有用—例如,您可以使用计算机上的PDB远程调试在不同计算机上运行的代码,以获取发生异常的行号


如果不使用.pdb,stacktraces中不包括行号和文件名,因此调试它们会更加困难。

您可以在“生成->高级…->调试信息”下的项目属性中控制pdb/符号的生成:。选项包括:

  • (无符号信息)
  • full(将生成pdb,并将一些符号信息嵌入到部件中)
  • 仅pdb(a.将生产pdb,但不会影响组件)
有关更多信息,请参阅


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

是的,但是在程序集中嵌入调试信息也会有一个错误对性能的影响(根据Microsoft)谢谢!这很有用!我没有意识到每个异常对象的堆栈跟踪中都没有行号!嗨,布莱恩!谢谢!我对此表示怀疑,但似乎每个人都同意这一点!所以每个人都同意PDB文件不会降低性能?有人运行过任何测试来确认吗?@theJerm应用程序没有读取PDB during运行时。因此,除了它们占用的磁盘空间之外,没有任何开销,除非您正在调试。@BrianRasmussen:PDB在逆向工程中有任何用处吗?我正在混淆我的发布版本。我是否仍要在输出中生成PDB?抱歉,但我不得不不同意,发布版本应该是:发布,无调试,而不是debugging运行时依赖项。@meagar即使在发布模式下,您也应该保留.pdb文件以供将来参考,即使您不希望它们打包到最终安装程序MSI中发送给客户。当某些未经处理的方式突发事件导致应用程序在producti中崩溃时,pdb文件将是您唯一的希望之光在框上。pdb文件对于使用windows SDK附带的winDbg工具调试崩溃转储文件非常有用。优化的代码标志应该保持选中状态,正如您正确提到的那样。@Rasikbiratiwari我不在乎。我没有问这个问题。抱歉@meagar!我应该改为使用Abruzzo Forte。对于由此带来的不便,我深表歉意。这是mo中的6正在运行,看起来我仍然很困;)您也可以使用
MSBuild.exe YourProject.csproj/p:DebugSymbols=false/p:DebugType=None