Wenn Debug.Assert()
-Methodenaufrufe im Quellcode existieren und ich im Freigabemodus kompiliere, erzeugt der Compiler die IL für Debug.Assert()
, obwohl sie nicht aufgerufen wird?
Einer unserer Entwickler hat kürzlich eine Assert hinzugefügt, die Informationen über unsere interne Sicherheit anzeigt. Könnte jemand den Freigabemodus IL ansehen und den Text für die Assertion herausfinden?
Es wird standardmäßig nicht verwendet, es sei denn, Sie definieren das DEBUG-Symbol (und standardmäßig für Release, das deaktiviert ist).
Öffnen Sie zum Überprüfen die Projekteigenschaften, und wählen Sie in Visual Studio den Bereich Erstellen aus. Es wird die Checkbox "DEBUG-Konstante definieren" angezeigt. Wenn es für die Freigabe aktiviert ist, wird die Aktivierung ausgelöst. Sonst werden sie nicht.
Nein, die Mitglieder der Klasse Debug
(mit dem Attribut ConditionalAttribute
) geben kein IL aus. Es gibt keine explizite Erwähnung in MSDN , aber die folgenden zwei Zitate implizieren das Verhalten ganz gut, um Roys Antwort zu ergänzen:
Wenn Sie Methoden in der Debug-Klasse verwenden, um Debuginformationen zu drucken und überprüfen Sie Ihre Logik mit Behauptungen, Sie können Ihren Code mehr machen robust, ohne die Leistung und Codegröße Ihres Versandprodukt.
Also bedeutet kein Größenunterschied keine Ausgabe von diesen Dingen und
Das ConditionalAttribute-Attribut wird auf die Methoden von Debug angewendet. Compiler, die ConditionalAttribute unterstützen, ignorieren Aufrufe an diese Methoden, es sei denn "DEBUG" ist als bedingtes Kompilierungssymbol definiert. Sehen Sie in der Dokumentation eines Compilers nach, ob ConditionalAttribute wird unterstützt und die Syntax zum Definieren eines bedingtes Kompilierungssymbol.
Dies bedeutet, dass diese Aufrufe auf der Compiler-Ebene nicht berücksichtigt werden (wenn DEBUG
nicht definiert ist.)