我有一个已部署的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测试版。也许这是造成这个问题的?
答案 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构建,但这对我来说并不明显。直到我开始追踪我在最近的更新中所做的每一点改变之后,它甚至都没有出现。