it-swarm.com.de

Funktioniert #if RELEASE wie #if DEBUG in C #?

In allen Beispielen, die ich von der # if-Compiler-Direktive gesehen habe, wird "DEBUG" verwendet. Kann ich "RELEASE" auf die gleiche Weise verwenden, um Code auszuschließen, den ich beim Kompilieren im Debug-Modus nicht ausführen möchte? Der Code, den ich mit diesem Block umgeben möchte, sendet eine Reihe von E-Mails, und ich möchte diese beim Testen nicht versehentlich versenden.

245
Brian Sullivan

Nein, wird es nicht, es sei denn, Sie machen etwas Arbeit.

Der wichtige Teil hier ist, was DEBUG wirklich ist, und es ist eine Art Konstante, mit der der Compiler prüfen kann.

Wenn Sie die Projekteigenschaften überprüfen, finden Sie auf der Registerkarte Erstellen drei Elemente:

  • Ein Textfeld mit der Bezeichnung "Bedingte Kompilierungssymbole"
  • Ein Kontrollkästchen mit der Bezeichnung "DEBUG-Konstante definieren"
  • Ein Kontrollkästchen mit der Bezeichnung "TRACE-Konstante definieren"

Es gibt weder ein solches Kontrollkästchen noch eine vordefinierte Konstante/Symbol mit dem Namen RELEASE.

Sie können diesen Namen jedoch problemlos in das Textfeld Bedingte Kompilierungssymbole einfügen. Stellen Sie jedoch sicher, dass Sie die Projektkonfiguration auf den Freigabemodus setzen, da diese Einstellungen für jede Konfiguration gelten.

Wenn Sie also nichts in das Textfeld einfügen, wird #if RELEASE unter keiner Konfiguration Code erzeugen.

RELEASE ist nicht definiert, kann aber verwendet werden 

#if (!DEBUG)
  ...
#endif
356
M4N

Nee. 

In der Debug-Konfiguration gibt es eine Konstante DEBUG (automatisch von Visual Studio definiert), während für den Freigabemodus keine solche Konstante definiert ist. Überprüfen Sie Ihre Projekteinstellungen unter Build.

Die Auswahl von [Define DEBUG] unter Project -> Build ist wie das Einfügen von #define DEBUG am Anfang jeder Datei. 

Wenn Sie eine RELEASE-Konstante für die Release-Konfiguration definieren möchten, gehen Sie zu:

  • Projekteigenschaften -> Erstellen
  • Wählen Sie den Freigabemodus
  • geben Sie im Bedingte Kompilierungssymbole Textfeld Folgendes ein: RELEASE
33
Pop Catalin

Bei meiner VS-Installation (VS 2008) funktioniert #if RELEASE nicht. Sie können jedoch nur #if !DEBUG verwenden.

Beispiel:

#if !DEBUG
SendTediousEmail()
#endif
23
JaredPar

Ich habe das noch nie gesehen ... aber ich habe gesehen:

#if (DEBUG == FALSE)

und

#if (!DEBUG)

Diese Arbeit für dich?

9
Pete H.

Sie können #if(!DEBUG) für diese Zwecke verwenden.

6

"Pop Catalin" hat es richtig gemacht. Die Steuerung der Definition anhand der Art des Builds bietet viel Flexibilität. Beispielsweise können Sie eine Konfiguration "DEBUG", "DEMO" und "RELEASE" in derselben Lösung haben. Dies vermeidet die Notwendigkeit einer doppelten Programmierung mit zwei verschiedenen Lösungen.

Ja #if RELEASE oder #if (RELEASE) funktioniert genauso wie #if DEBUG, wenn das RELEASE Conditional-Kompilierungssymbol definiert ist.

Folgendes stammt aus dem "Pop Catalin" -Post: Wenn Sie eine RELEASE-Konstante für die Release-Konfiguration definieren möchten, gehen Sie zu: * Projekt Eigenschaften -> Build * Wählen Sie den Freigabemodus * In Bedingte Kompilierungssymbole Textfeld geben Sie ein: RELEASE

4
Steve L

Ich weiß, dass dies eine alte Frage ist, aber es wäre erwähnenswert, dass Sie eigene Konfigurationen außerhalb von DEBUG und RELEASE erstellen können, beispielsweise TEST oder UAT. 

Wenn Sie dann auf der Registerkarte "Erstellen" der Projekteigenschaften-Seite die "Bedingte Kompilierungssymbole" beispielsweise auf TEST setzen, können Sie ein Konstrukt wie verwenden 

#if (DEBUG || TEST )
    //Code that will not be executed in RELEASE or UAT
#endif

Sie können dieses Konstrukt aus bestimmten Gründen verwenden, z. B. bei Bedarf verschiedene Clients oder sogar ganze Webmethoden. Wir haben dies auch in der Vergangenheit verwendet, wo einige Befehle Probleme mit bestimmter Hardware verursacht haben. Daher haben wir eine Konfiguration für eine App, wenn sie auf Hardware X bereitgestellt wird.

1

Sie können eigene bedingte Symbole für die Kompilierzeit erstellen (beliebiger Name). Gehen Sie zum Dialogfeld "Dialogfeld" "Projekt", das sich im Feld "Projekteigenschaften" befindet. Menüoption .__: Projekt -> [Projektname] Eigenschaften ..

Sie können sie auch "oben in der C # -Codedatei" definieren. Mögen:

#define RELEASE
// or
#undef RELEASE

sie können das Symbol in einer # if-Anweisung verwenden:

#if RELEASE
// code ...
#Elif …
// code ...
#endif

// or

#if !RELEASE
// code ...
#endif
0
King Coffee