Моей проблемы с DefaultTraceListener
(это единственным следом слушатель, если не переопределена в app.config) является то, что, если AssertUiEnabled
является false
(т.е. в ASP.NET) он пишет сообщение OutputDebugString
о неудачных утверждениях (вызовы Trace.Assert(false)
), , но продолжает выполнение.TraceListener, который бросает исключение на неудавшееся утверждении
Поэтому я использую следующий подкласс класса 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
}
}
Теперь мой вопрос: Кто-нибудь видит проблему с этим подходом?
Похоже, что вопрос более подходит для обзора кода сайта –