ASP.NET:如何在DEBUG模式下编译?

时间:2011-01-01 23:58:37

标签: asp.net debugging release release-management

AFAIK,当web / app-config设置“编译”有debug =“false”时,通常的ASP.NET网站/ Web应用程序切换到DEBUG模式。

但我不清楚它是如何运作的。让我们考虑一下例子:

我有<compilation debug="true" />。我已将以下行添加到“Page_Load”方法中:

 System.Diagnostics.Debug.WriteLine("Page_Load");

当我在'debug'模式下启动网站时(使用F5按钮)它将'Page_Load'放入输出窗口。到目前为止一切都还可以。

当我将应用程序编译模式更改为非调试时:

它会重新编译“非调试”模式的所有内容吗?仅仅通过此更改就足以进入“生产”环境吗?

我想,对于不使用其他项目的网站来说应该足够了。否则,我最好将整个配置切换到“释放”模式。在这种情况下,EACH项目将在“发布”模式下重新编译。

我是对的吗?如果这里有问题,你能指点我吗?

非常感谢!

2 个答案:

答案 0 :(得分:1)

关于你的问题的一点是在Visual Studio的调试/发布模式下编译与Web.config的调试标志之间的区别。

我会尽力向你解释。

首先,您必须了解如何编译ASP.NET应用程序,否则您将无法理解这两个编译之间的区别。

ASP.NET应用程序由标记(即.aspx页面,.ascx控件,.ashx .asmx标记文件)和代码隐藏组成。从IDE的角度来看,代码隐藏(无论是Visual Studio,MonoDevelop等)都是 .NET类库,即。一组不单独做任何事情的课程。这些可以通过IDE设置无差别地编译为调试或释放模式。如果您编译为发布模式,则将忽略对Debug类的调用。

标记怎么样?启动Web应用程序时,应用程序服务器会将标记文件编译以获取最终程序集。例如,带有代码隐藏文件的Default.aspx页面被编译成最终类,继承代码隐藏类,并将所有静态部分写入HTTP输出,以及所有在基类中实例化的控件在设计期间选择的位置。内联代码(即<script runat=server>标签)也被编译。为了选择编译模式,使用了Web.config中的调试标志,因为您无法通过简单地反映它来确定是否已在调试或发布模式下编译了程序集(尽管可能存在一些经验标准)。

用几句话

  1. 从代码隐藏中调用Debug类时,请确保IDE将网站编译为调试模式
  2. 当您从标记中的内联代码调用Debug类时,请确保已设置Web.config的调试标志
  3. 如果您将应用程序部署为源代码(它在Mono中对我不起作用,我必须首先xbuild),我不确定,但我相信调试标志将用于第一个编译阶段太
  4. 我希望我能得到帮助!

答案 1 :(得分:0)

据我所知,当您更改网站的web.config以禁用调试时,JIT将从头开始 - 因为System.Diagnostics.Debug命名空间中的所有方法都标记为仅包含在调试模式([Conditional("DEBUG")])中,发布版本中的调用根本不存在。

对于调试模式下的预编译Web应用程序,这些调用将在生成的DLL中,此时禁用调试将无法帮助您 - 您需要在发布模式下重建/预编译Web应用程序释放它。