2009-12-29 25 views
6

出於某種原因的工作,下面一行不做任何事情在我的ASP.NET MVC項目:Debug.Assert的()已停止在我的項目

System.Diagnostics.Debug.Assert(false); 

我有三重檢查,我使用的調試配置並在「調試配置」設置中選中「定義調試常數」。

同樣的問題也出現在我的單元測試項目中。

實現我自己的斷言方法似乎是微不足道的,但有點尷尬。任何有關如何解決這個問題的提示將不勝感激。

編輯:我在我的項目中使用了幾個第三方模塊。這可能是由引用在發佈模式下編譯的模塊引起的嗎?

+0

你有沒有仔細檢查過你沒有運行發佈版本? – ChrisF 2009-12-29 17:22:59

+1

如何用Reflector打開你的dll/exe文件,看看assert是否真的在代碼中?而且你的組件實際上是從你認爲的位置加載的?也許再次檢查您使用的是調試版本。 – 2009-12-29 17:27:24

+0

@ChrisF:正如我所說的,是的。三次... :-) – 2009-12-29 17:27:25

回答

0

由於您正在運行ASP.NET MVC,可能會在您的web.config中導致該問題的debug = false?

+0

不幸的不是。我剛剛檢查了我的web.config,debug這個詞只在這一行: 2009-12-29 17:54:23

+0

另外查看配置文件中是否有」system.diagnostics「部分。您可以關閉配置文件中的斷言。 – 2009-12-29 18:01:23

+0

@Eric:感謝您的建議,但在我的web.config中未提及「診斷」一詞。 – 2009-12-29 18:03:13

6

ASP.Net Assertion顯示在VS控制檯中,而您的網頁通過VisualStudio顯示。它不會中斷該線程以顯示一個MsgBox或像編程語言一樣中斷斷言行。

1

古老的問題,但如果你沒有定義默認監聽器,它將不會像往常一樣顯示消息對話框。我還沒有確認它是否真的發生了火災並被吃掉(我懷疑是這種情況),還是根本沒有發火。

但無論如何它不會顯示對話框。

從文檔爲DefaultTraceListener

爲斷言和Fail方法消息框的顯示調用 依賴於DefaultTraceListener的存在。如果 DefaultTraceListener不在Listeners集合中,則不會顯示消息 。

的DefaultTraceListener可由 元件被除去,由該元件,或者通過調用監聽屬性 清除 方法(System.Diagnostics.Trace.Listeners.Clear())。

您可以檢查你的聽衆,並通過使用像下面的一些代碼獲取類型:

var listeners = new TraceListener[Debug.Listeners.Count]; 
Debug.Listeners.CopyTo(listeners, 0); 
foreach (var listener in listeners) { 
    Debug.WriteLine("Name : {0} of type : {1}", listener.Name, listener.GetType()); 
} 

如果你沒有一個叫「默認」,Debug.Assert將靜默失敗。

至於配置推移,這將工作假設一個名爲默認監聽器是可用的:

<system.diagnostics> 
    <trace autoflush="false"> 
     <listeners> 
     </listeners> 
    </trace> 
</system.diagnostics> 

這將工作假設一個名爲默認監聽器是可用的:

<system.diagnostics> 
    <trace autoflush="false"> 
     <listeners> 
      <add name="bigEarsListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="TracingInfo.log"/> 
     </listeners> 
    </trace> 
</system.diagnostics> 

這將作爲我們明確地定義了我們的默認值:

<system.diagnostics> 
    <trace autoflush="false"> 
     <listeners> 
      <remove name="Default" /> 
      <add name="Default" type="System.Diagnostics.DefaultTraceListener" /> 
      <add name="bigEarsListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="TracingInfo.log"/> 
     </listeners> 
    </trace> 
</system.diagnostics> 

這個WONT的工作:

<system.diagnostics> 
    <trace autoflush="false"> 
     <listeners> 
      <remove name="Default" /> 
      <add name="bigEarsListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="TracingInfo.log"/> 
     </listeners> 
    </trace> 
</system.diagnostics> 

如果你沒有在你的web.config診斷部分則默認可能會得到一些VS擴展等刪除或重寫,所以加入這個部分應該把它帶回預期的行爲。