私の問題DefaultTraceListener
(app.configでオーバーライドされていない場合、これは唯一のトレースリスナーです)は、AssertUiEnabled
(false
つまりASP.NETで)OutputDebugString
失敗したアサーション(への呼び出しTrace.Assert(false)
)のようにメッセージを書き込みますが、実行を継続します。
TraceListener
そのため、代わりに例外をスローするの次のサブクラスを使用しています。を使用してアクティブ化します
TraceListenerWhichThrowsExceptionOnFail.InsertAsFirstTraceListener(Trace.Listeners);
でApplication_Init
。
これで、Application_Error
イベントでは、Trace.Assert(false)
.
public class TraceListenerWhichThrowsExceptionOnFail : TraceListener
{
public static void InsertAsFirstTraceListener(TraceListenerCollection traceListeners)
{
traceListeners.Insert(0, new TraceListenerWhichThrowsExceptionOnFail());
}
public override void Fail(string message, string detailMessage)
{
message = string.IsNullOrEmpty(detailMessage) ? message : message + ", Detail message: " + detailMessage;
throw new ApplicationException("Trace assertion failed" +
(string.IsNullOrEmpty(message) ? "" : ": " + message) + ".");
}
public override void Write(string message)
{
// NOP
}
public override void WriteLine(string message)
{
// NOP
}
}
今私の質問:このアプローチに問題がある人はいますか?