C# 部署应用程序调试版本的含义?

C# 部署应用程序调试版本的含义?,c#,security,debugging,deployment,compiler-construction,C#,Security,Debugging,Deployment,Compiler Construction,我想知道决定部署一个内置于Debug(带有Debug符号表)中的应用程序的利弊,该应用程序与剥离符号的发布模式相反。还有其他排列方式,如打开调试优化和打开发布调试符号 我认为可能值得关注的领域有(你可能知道其他人): 安全性 性能 稳定性 但我不是专家,所以我不确定部署调试应用程序会对这些领域产生什么影响 这可能与此无关,但对于相关人员来说,此应用程序是一个C#.Net framework 3.5(管理terrabytes数据的业务应用程序)。这是一个(付费)客户的应用程序 选择这样做有什么

我想知道决定部署一个内置于Debug(带有Debug符号表)中的应用程序的利弊,该应用程序与剥离符号的发布模式相反。还有其他排列方式,如打开调试优化和打开发布调试符号

我认为可能值得关注的领域有(你可能知道其他人):

  • 安全性
  • 性能
  • 稳定性
但我不是专家,所以我不确定部署调试应用程序会对这些领域产生什么影响

这可能与此无关,但对于相关人员来说,此应用程序是一个C#.Net framework 3.5(管理terrabytes数据的业务应用程序)。这是一个(付费)客户的应用程序


选择这样做有什么明显的优点或缺点吗?

您也可以给他们提供一个包含调试信息的发布版本。

安全性:调试和发布托管代码,如C#,如果没有混淆,已经很容易受到攻击。用模糊处理来保护代码,否则它很容易被复制、窃取,任何像加密这样的安全性都会被破解(在本例中,您提到了为客户提供数TB的数据)。我已经回答了一个问题。另外,创建一个密钥文件并对程序集进行签名

性能:调试速度明显较慢,不应发布调试版本。如果使用AJAX,由于调试版本更大,那么每个页面请求都会更重。将debug标志设置为false应用程序配置文件,我在本文中包含了一些类似的提示

稳定性:调试使用更多内存,如果服务器内存不足,则可能会降低稳定性。使用调试DLL的一个优点是,如果应用程序失败,您的pdb文件将已经就绪。最佳实践是,对于您构建的每个发布版本,将调试构建保持在安全的地方。如果客户要求您进行调试,请备份他的文件夹,并将其替换为相应的调试程序集


我已经开发了一种归档产品,它也归档了数TB的数据,我不建议部署调试版本,并确保其功能失效,以及使用Dotfuscator加密的文件加密方法。

我知道我可以做到这一点。可以再详细介绍一下执行或不执行此操作的原因。代码运行经过优化,因此不会引入性能问题。但是你仍然可以得到一些好处,比如更详细的堆栈跟踪。好吧,但是在你的回答中谈论它。不,这样就足够清楚了,我同意GenEric35获得认可的点头。+1与Reflector等,如果没有混淆,是调试还是发布在很大程度上是无关紧要的。就像System.Reflection一样,“private”只是一个建议。我喜欢你的想法,即构建调试和发布,然后在必要时替换+1Debug不仅速度较慢,而且。。。不一样。如果您的代码依赖于优化,它将完全中断。一个很好的例子(不推荐!)是检查调用堆栈,并期望调用方没有内联。希望scottgu的这个博客能回答您的问题!这是针对ASP.NET应用程序的。对于其他项目类型,它们中的大多数也是如此。