7

当我将 ASP.NET Web 应用程序部署到生产环境时,我使用配置转换debug="true"<compilation>. 然而,就在今天,我注意到 web.config 中的另一个部分如下所示:

<system.codedom>
    <compilers>
        <compiler compilerOptions="/define:Debug=True" />
    </compilers>
</system.codedom>

这是什么?那里的事实是否违背了将其从中删除的目的<compilation>?如果我如上所示删除该属性会发生什么?

4

2 回答 2

6

是否存在破坏了将其从其中删除的目的的事实<compilation>

来自MSDN C# Compiler Options
要打开调试,编译器上的标志/debug不是/define:Debug=True

/debug :指示编译器发出调试信息。
/define :定义预处理器符号。

因此,当您定义时,Debug=True您只会使这种代码情况成为现实:

#if DEBUG == true
// Compile what is inside here !
#endif

除非您在上面的/define:Debug=True代码中手动包含它们,否则不会添加任何额外的调试信息。

测试页面

我使用以下代码进行测试,看看会发生什么。

    txtDebug.Text = HttpContext.Current.IsDebuggingEnabled.ToString();

    #if DEBUG
    txtDebug.Text +=  "<br>defined Debug is on";
    #endif
    #if DEBUG == true
    txtDebug.Text +=  "<br>defined Debug = true is on";
    #endif

结果 1

现在如果debug="false"andcompilerOptions="/define:Debug=True"结果是

错误
定义 Debug = true 开启

结果 2

如果debug="true"compilerOptions="/define:Debug=True"结果是

true
已定义 Debug 已开启 已
定义 Debug = true 已开启

结果 3

现在我再做一个测试,我在 web.config 上添加了这一行

  <compiler language="c#;cs;csharp" extension=".cs" 
    compilerOptions="/define:Debug=True /D:DEBUG,TESTFLAG" 
   type="Microsoft.CSharp.CSharpCodeProvider, System, 
     Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
       warningLevel="4" />

结果与debug=false

假(调试为假)
定义调试打开(但定义的调试现在运行)
定义调试=真打开(这也是运行)
测试标志(但定义的额外标志也运行)

MSDN

查看/define (预处理器定义)的 MSDN我看声明

/define:Debug=True

仅适用于这种代码情况

#if DEBUG == true
txtDebug.Text +=  "<br>defined Debug = true is on";
#endif
于 2013-05-17T13:46:32.643 回答
1

您设置的字符串compilerOptions基本上是一段命令行,它被添加到所有编译中。

如果您使用 aspx 页面,您也可以在其中设置它,使其仅适用于一页。例如

<%@ Page Language="C#" CompilerOptions="etc..." %>

您是如何在配置中将其设置为“/define:Debug=True”的?有这种情况并不典型。debug但是要回答您的问题,是的,无论属性的值如何,这都会有效地打开调试。

除非您有充分的理由拥有它,否则我会完全取消它。

于 2013-05-16T17:06:29.833 回答