2009-12-29 10 views
6

Aus irgendeinem Grunde die folgende Zeile tut nichts in meinem ASP.NET MVC-Projekt:Debug.Assert() hat in meinem Projekt aufgehört zu arbeiten

System.Diagnostics.Debug.Assert(false); 

Ich habe Triple-geprüft, dass ich die Debug-Konfiguration verwenden und "Debug-Konstante definieren" ist in den Debug-Konfigurationseinstellungen aktiviert.

Das gleiche Problem tritt auch in meinem Unit-Test-Projekt.

Die Implementierung meiner eigenen Assert-Methode scheint trivial, aber ein bisschen peinlich. Irgendwelche Hinweise, wie das zu beheben wäre, würde sehr geschätzt werden.

Bearbeiten: Ich verwende mehrere Module von Drittanbietern in meinem Projekt. Könnte dies möglicherweise dadurch verursacht werden, dass auf ein Modul verwiesen wird, das im Freigabemodus kompiliert wurde?

+0

Haben Sie überprüft, dass Sie die Release-Version nicht ausführen? – ChrisF

+1

Wie wäre es, öffnen Sie Ihre DLL/EXE mit Reflector und sehen, ob die Behauptung tatsächlich im Code ist? Und wird Ihre Assembly tatsächlich von dem Ort geladen, von dem Sie denken, dass es ist? Vielleicht überprüfen Sie ein anderes Mal, dass Sie die Debug-Version verwenden. –

+0

@ChrisF: Wie gesagt, ja. Dreimal ... :-) –

Antwort

0

Da Sie ASP.NET MVC ausführen, konnte in Ihrem web.config ein debug = false sein, das das Problem verursacht?

+0

Leider nicht. Ich habe gerade meine web.config überprüft und das Wort debug ist nur in dieser Zeile:

+0

Suchen Sie auch, ob es einen Abschnitt" system.diagnostics "in der Konfigurationsdatei gibt. Sie können Assertionen in Ihrer Konfigurationsdatei deaktivieren. –

+0

@Eric: Danke für den Vorschlag, aber das Wort "Diagnose" wird in meiner web.config nicht erwähnt. –

6

ASP.Net Assertion wird in der VS Console angezeigt, während Ihre Webseite über VisualStudio angezeigt wird. Es unterbricht den Thread nicht, um eine MsgBox anzuzeigen oder die Assertion-Zeile wie eine Programmiersprache zu unterbrechen.

1

Alte Frage, aber wenn Sie keinen Standard-Listener definiert haben, wird kein Nachrichtendialog wie üblich angezeigt. Ich habe nicht bestätigt, ob es tatsächlich feuert und nur gegessen wird (ich vermute, das ist der Fall) oder ob es überhaupt nicht feuert.

Aber so oder so wird es den Dialog nicht anzeigen.

Aus der Dokumentation für DefaultTraceListener

Die Anzeige des Meldungsfeld für Assert und Fail-Methode aufruft auf das Vorhandensein des Default abhängt. Wenn sich der DefaultTraceListener nicht in der Listeners-Auflistung befindet, wird die Nachricht Box nicht angezeigt.

Die Default kann durch das Element entfernt werden, die durch das Element oder durch die klare Methode auf die Zuhörer Eigenschaft ruft (System.Diagnostics.Trace.Listeners.Clear()).

können Sie Ihre Zuhörer überprüfen und die Art erhalten, indem einige Code wie unter Verwendung von:

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()); 
} 

Wenn Sie nicht ein „Default“ genannt haben, Debug.Assert wird stillschweigend scheitern.

Soweit Konfiguration geht, wird diese Arbeit ein Zuhörer namens Standard verfügbar ist unter der Annahme:

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

vorausgesetzt, dies funktionieren wird named Standard steht ein Zuhörer:

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

wie dies funktionieren wird wir definieren ausdrücklich unseren Standard:

<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> 

Diese WONT Arbeit:

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

Wenn Sie nicht über einen Diagnose-Abschnitt in Ihrem web.config dann dem Standard könnte durch eine VS-Erweiterung usw. entfernt oder außer Kraft gesetzt wird, bekommen, so dass dieser Abschnitt hinzugefügt werden, sollte es zu erwartenden Verhalten bringen.

Verwandte Themen