Generiert Debug.Assert IL im Freigabemodus?

8

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?

    
Osiris 03.04.2012, 15:05
quelle

2 Antworten

9

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.

    
Roy Dictus 03.04.2012, 15:06
quelle
7

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

    
Grant Thomas 03.04.2012 15:10
quelle

Tags und Links