System.Web.HttpContext.Current.IsDebuggingEnabled
和System.Diagnostics.Debugger.IsAttached
之間有什麼區別嗎?IsDebuggingEnabled和Debugger.IsAttached之間的區別是什麼
如果是這樣,除了一個只適用於Web應用程序而另一個適用於所有類型的項目這一事實之外,確切的區別是什麼?
System.Web.HttpContext.Current.IsDebuggingEnabled
和System.Diagnostics.Debugger.IsAttached
之間有什麼區別嗎?IsDebuggingEnabled和Debugger.IsAttached之間的區別是什麼
如果是這樣,除了一個只適用於Web應用程序而另一個適用於所有類型的項目這一事實之外,確切的區別是什麼?
HttpContext.IsDebuggingEnabled
是關於web.config中的編譯設置。 Debugger.IsAttached
定義是否實際上有監聽來自Web服務器的信息的活動調試器。
見的解釋在DotnetPerls關於HttpContext.IsDebuggingEnabled
:
調試模式是不是默認。 ...如果您在Web.config中未設置debug =「true」,則該站點將以發佈模式進行編譯。
關於您的問題爲什麼第一個'僅適用於Web應用程序':Web應用程序有能力在運行時編譯,而所有其他.NET產品都是預編譯的。正因爲如此,您可以在web.config中定義構建是否在調試或發佈模式下完成。這是一個僅限於ASP.NET的選項,因此該屬性僅在此處可用。
作爲對第二個問題的回答,爲什麼第一個選項僅適用於ASP.NET:Windows應用程序還有一種方法檢查它的構建狀態:通過檢查DebuggableAttribute
,如How to check if an assembly was built using Debug or Release configuration?中所述。
IsDebuggingEnabled
指的是「調試模式」,它不一定意味着調試器實際上是連接的。您可以通過在web.config
文件中設置<compilation debug="true">
來將ASP.NET網站設置爲調試模式。
當網站處於調試模式時,JIT優化不適用於視圖文件(.aspx,.cshtml等)中包含的代碼以及任何運行時編譯的代碼隱藏文件或App_Code
目錄。還有其他影響。
感謝您另外指出調試模式和無調試模式(關於JIT編譯器)的差異。它伴隨着爲什麼第二個單獨的調試配置合理的事實,所以它伴隨着我們有兩種檢查調試模式的方式。 – modiX 2014-09-04 21:58:59
不,沒有更多的問題。順便說一句,我沒有問「爲什麼第一個選項只適用於ASP.NET」。我要求在這兩種選擇之間有更多的差異。無論如何,感謝您在Windows應用程序中指出'DebuggableAttribute'。 – modiX 2014-09-04 21:56:01
@modiX:我用一段關於你的問題的答案更新了答案。 – 2014-09-05 06:42:32