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

Posted

技术标签:

【中文标题】ASP.NET:如何在 DEBUG 模式下编译?【英文标题】:ASP.NET: how can I compile in DEBUG mode? 【发布时间】:2011-01-01 23:58:37 【问题描述】:

AFAIK,当 web/app-config 设置“compilation”具有 debug="false" 时,通常的 ASP.NET 网站/Web 应用程序打开到 DEBUG 模式。

但我不清楚它是如何工作的。让我们考虑示例:

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

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

当我以“调试”模式(使用 F5 按钮)启动网站时,它会将“Page_Load”放入输出窗口。到目前为止一切正常。

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

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

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

我说的对吗?如果这里有什么问题,请指点我吗?

非常感谢!

【问题讨论】:

检查这个:***.com/questions/1600985/… 【参考方案1】:

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

我会尽力向你们解释。

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

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

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

简而言之

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

希望我对你有所帮助!

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于ASP.NET:如何在 DEBUG 模式下编译?的主要内容,如果未能解决你的问题,请参考以下文章

C# Debug模式下才执行的语句

以下程序在 C89 模式下编译时如何输出“C89”,在 C99 模式下编译时如何输出“C99”?

在调试模式下编译时出现qrc_resource.cpp错误

VS2017在Release下编译错误C1001

在release模式下编译opencv写的人脸检测代码,提示:无法打开输入文件“opencv_calib3d244.lib”

opencv debug版本在linux下编译,并写了一个DEMO