古老的問題,但如果你沒有定義默認監聽器,它將不會像往常一樣顯示消息對話框。我還沒有確認它是否真的發生了火災並被吃掉(我懷疑是這種情況),還是根本沒有發火。
但無論如何它不會顯示對話框。
從文檔爲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擴展等刪除或重寫,所以加入這個部分應該把它帶回預期的行爲。
你有沒有仔細檢查過你沒有運行發佈版本? – ChrisF 2009-12-29 17:22:59
如何用Reflector打開你的dll/exe文件,看看assert是否真的在代碼中?而且你的組件實際上是從你認爲的位置加載的?也許再次檢查您使用的是調試版本。 – 2009-12-29 17:27:24
@ChrisF:正如我所說的,是的。三次... :-) – 2009-12-29 17:27:25