我现在已经意识到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) { ... }
更换任何
#if DEBUG ... #endif
代码块我现在觉得有点傻,已经跟踪它。 – 2011-02-14 18:00:13