部署的ASP.NET站点具有DEBUG true

时间:2011-02-14 17:29:24

标签: c# asp.net

我有一个已部署的ASP.NET站点。 compilation的{​​{1}}设置设为debug。我有一些代码可以检查false定义,并且它正在报告DEBUG

为什么呢?我需要做些什么才能成为true

这曾经有用,但自从我将网站从.NET 2.0升级到.NET 3.5后,我就看到了这个问题。请注意,服务器始终是.NET 3.5。

更新
如上所述,在我的web.config文件false中是debug(我理解DEBUG预处理器符号和web.config设置无关)。此外,VS2010的配置管理器仅提供Debug作为网站的配置,VS2010将覆盖任何添加Release的尝试。

我刚刚意识到另一个细节;我正在使用VS2010的SP1测试版。也许这是造成这个问题的?

3 个答案:

答案 0 :(得分:6)

我现在也意识到Emit Debug Information不仅可以创建PDB文件,还可以启用#if DEBUG子句中运行的任何代码(就像在web.config中编译debug = true一样)。 只要在发布模式下编译,此编译选项不会影响解决方案中的其他项目。

为了获得使用您的网站PDB文件而不启用DEBUG代码块的好处,您不应该使用Emit Debug Information部署您的网站,而是在指定compilerOptions =“/ debug:pdbonly”之后发布网站你的web.config文件。同时指定/ optimize-以确保行号与代码中的相同

代码示例:

<system.codedom>
    <compilers>
        <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
            compilerOptions="/optimize- /debug:pdbonly">
            <providerOption name="CompilerVersion" value="v3.5" />
            <providerOption name="WarnAsError" value="false" />
        </compiler>
        <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="4" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
            <providerOption name="CompilerVersion" value="v3.5" />
            <providerOption name="OptionInfer" value="true" />
            <providerOption name="WarnAsError" value="false" />
        </compiler>
    </compilers>
</system.codedom>

还有另一项工作可以用PDB文件编译您的网站,但是没有启用DEBUG代码,而是通过在DE(Consts.DEBUG)子句中包装DEBUG代码块。

在App_Code文件中,有一个包含以下代码的CS文件:

    public static class Consts
{
    static bool _bIsInDebugMode = false;

    static Consts()
    {
        var oConfigSection = System.Configuration.ConfigurationManager.GetSection("system.web/compilation") as System.Web.Configuration.CompilationSection;
        _bIsInDebugMode  = oConfigSection != null && oConfigSection.Debug;
    }

    public static bool DEBUG { get { return _bIsInDebugMode; } }
}

现在用#if DEBUG ... #endif

替换任何if (Consts.DEBUG) { ... }代码块

答案 1 :(得分:2)

您需要在Visual Studio中将解决方案配置更改为“Release”。 compilation设置仅适用于动态编译的页面和控件。

答案 2 :(得分:1)

我能够追踪到这一点。现在我知道原因似乎很明显和好奇。

发布网站时,可以选择Emit debug information。现在,对我而言,这表明将发出非常有用的PDB,但不是实际的调试版本。对于其他人来说,这似乎很明显会导致Debug构建,但这对我来说并不明显。直到我开始追踪我在最近的更新中所做的每一点改变之后,它甚至都没有出现。