2011-02-14 40 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版本,但這對我來說並不明顯。直到我開始追蹤我在最近的更新中做出的每一個小小的改變之後,它纔想起來。