我現在已經意識到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