使用调试模式而不是发布模式将应用程序部署到生产?

我在一家商店工作,维护一个相当新的应用程序。 该应用程序仍有其公平的错误,每天都有大量的门票。 我们给这些票据提供的错误信息没有它可能有用,因为应用程序是在发布模式下编译的,我读到的更小更快(有意义)。

将.NET应用程序部署到以调试模式编译的生产是否有任何后果? 我希望它会慢一点,但我已经看到差异是名义上的。 这可以向我们保证,当我们在故障单上出现错误时,我们会将这些错误与行号相关联,这当然会使调试变得更加容易。

任何会阻止你这么做的重大危险信号? 我的任务是研究这种可能性。 所以感谢任何反馈。

在DEBUG而不是Release模式下部署应用程序会降低性能。 当然可以做出妥协。 我会建议以下之一:

  • 看看为global.asax-中的OnError添加一个全局error handling程序
  • 看看与Scott Hanselman提出的类似的妥协

我的经验是,如果您正在考虑桌面(winforms / WPF)应用程序,这可以正常工作,但在任何情况下都不应该尝试使用asp.net应用程序。

您标记了此[vb.net],您无法发送使用WithEvents的调试版本或程序。 如果没有连接调试器,WeakReference实例会有一个已知的afaik未解决的内存泄漏。 它们用于支持Edit + Continue。

您可以做的第一件事就是将.pdb文件与您的应用一起发送。 在C#IDE中,使用Project + Properties,Build选项卡,Advanced,将Debug Info更改为“Full”。 您将在exception堆栈跟踪中获取行号信息。

您无法完全信任行号,JIT优化器将移动代码以使其执行更快。 内联短函数,如属性getter。 您可以在与禁用JIT优化程序的可执行文件相同的目录中添加yourapp.ini文件

[.NET Framework Debugging Control] GenerateTrackingInfo=1 AllowOptimize=0 

这一切都取决于您的生产环境,业务和性能要求的重要性。 没有什么是严格的。

部署Debug版本对我来说是一个红旗,虽然它并非闻所未闻。 这是桌面还是服务器应用程序? 对Debug.Assert失败的任何调用都可能是一个问题,因为那些可以关闭你的应用程序和/或导致调试器连接(VS.NET不是唯一的调试器,如果我记得.net fx安装一个轻量级调试器)。 虽然这对于开发者来说可能有所帮助,但它肯定会让正常人感到困惑。

一个运行良好的选项不是调试版本,而是确保您的错误报告机制包括(显示或记录)任何抛出exception的堆栈跟踪信息。 这有助于在不需要pdbs的情况下很好地查明错误。

如果这是一个桌面应用程序,您可以与少数客户一起尝试,但请注意其他答案中给出的建议。 尝试更多powershell用户或有很多问题的人可能愿意做志愿者。