C# 部署的ASP.NET站点已调试为true

C# 部署的ASP.NET站点已调试为true,c#,asp.net,C#,Asp.net,我有一个已部署的ASP.NET站点。debug的compilation设置设置为false。我有一些代码检查DEBUGdefine,它报告true 为什么??我需要做什么才能使其成为false 这曾经是有效的,但自从我将我的网站从.NET2.0升级到.NET3.5后,我发现了这个问题。请注意,服务器始终为.NET3.5 更新 如上所述,在我的web.config文件中,debug是false(我知道debug预处理器符号和web.config设置不相关)。此外,VS2010的Configurat

我有一个已部署的ASP.NET站点。
debug
compilation
设置设置为
false
。我有一些代码检查
DEBUG
define,它报告
true

为什么??我需要做什么才能使其成为
false

这曾经是有效的,但自从我将我的网站从.NET2.0升级到.NET3.5后,我发现了这个问题。请注意,服务器始终为.NET3.5

更新
如上所述,在我的web.config文件中,
debug
false
(我知道debug预处理器符号和web.config设置不相关)。此外,VS2010的Configuration Manager仅将调试作为网站的配置提供,任何添加版本的尝试都会被VS2010覆盖


我刚刚意识到另一个细节;我正在使用VS2010的SP1测试版。可能是这导致了问题?

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

。现在我知道了原因,这似乎很明显,也很奇怪


发布网站时,可以选择
发出调试信息
。现在,对我来说,这表明将发出非常有用的PDB,但不是实际的调试构建。对其他人来说,这可能会导致调试构建,但这对我来说并不明显。直到我开始跟踪我在最近的更新中所做的每一个小更改时,我才想起这一点。

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

为了获得在不启用调试代码块的情况下使用网站PDB文件的好处,您不应使用“发出调试信息”部署网站,而应在web.config文件中指定compilerOptions=“/DEBUG:pdbonly”后发布网站。还指定/优化-以确保行号与代码中的行号相同

代码示例:

<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>

现在替换任何
#如果调试#endif
if(Consts.DEBUG){…}代码块

我知道web.config设置与调试值无关。这就是为什么我感到困惑。为什么调试是真的?我没有改变解决方案中的任何内容。为什么它坚持只对网站进行调试配置?谢谢你的回答-这并不完全正确,但它确实给了我动力,让我回到基础上来,一步一步地跟踪。我现在觉得跟踪它有点愚蠢。
    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; } }
}