2011-02-14 36 views
3

我有一个已部署的ASP.NET站点。 debugcompilation设置设置为false。我有一些检查DEBUG定义的代码,它报告的是true已部署的ASP.NET站点具有DEBUG true

为什么?我需要做什么,这是false

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

更新
正如上面已经提到,在我的web.config文件debugfalse(我明白了DEBUG预处理符号和web.config中设置不相关)。此外,VS2010的配置管理器仅提供调试作为网站的配置,任何添加发布的尝试都会被VS2010覆盖。

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

+0

更换任何#if DEBUG ... #endif代码块我现在觉得有点傻,已经跟踪它。 – 2011-02-14 18:00:13

回答

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代码块包装在if(Consts.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 (Consts.DEBUG) { ... }

2

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

+0

我知道web.config设置与DEBUG值无关。这就是我困惑的原因。为什么DEBUG是真的?我没有改变解决方案中的任何内容。为什么它坚持只对该网站进行调试配置? – 2011-02-14 17:35:28

1

我能够跟踪下来。现在我知道原因似乎很明显和好奇。

发布网站时,可以选择Emit debug information。现在,对我来说,这表明非常有用的PDB将被释放,但不是实际的调试版本。对于其他人来说,看起来很明显,这会导致Debug版本,但这对我来说并不明显。直到我开始追踪我在最近的更新中做出的每一个小小的改变之后,它才想起来。