547 Stimmen

C# if/then-Anweisungen für Debug vs. Release

In den Lösungseigenschaften habe ich die Konfiguration für mein einziges Projekt auf "Release" gesetzt.

Am Anfang der Hauptroutine habe ich diesen Code, und es wird "Mode=Debug" angezeigt. Außerdem habe ich diese beiden Zeilen ganz oben:

#define DEBUG 
#define RELEASE

Teste ich die richtige Variable?

#if (DEBUG)
            Console.WriteLine("Mode=Debug"); 
#elif (RELEASE)
            Console.WriteLine("Mode=Release"); 
#endif

Mein Ziel ist es, unterschiedliche Standardwerte für Variablen auf der Grundlage von Debug vs Release-Modus zu setzen.

14 Stimmen

Sie definieren beides, Debug und Release.

22voto

Matthew Whited Punkte 21770

Wenn Sie versuchen, die für den Build-Typ definierte Variable zu verwenden, sollten Sie die beiden Zeilen entfernen ...

#define DEBUG  
#define RELEASE 

... diese verursachen die #if (DEBUG) um immer wahr zu sein.

Außerdem gibt es kein standardmäßiges Symbol für die bedingte Kompilierung von FREIGABE . Wenn Sie eine definieren möchten, gehen Sie zu den Projekteigenschaften und klicken Sie auf die Schaltfläche Bauen Sie und fügen Sie dann RELEASE in die Registerkarte Bedingte Kompilierungssymbole Textfeld unter dem Menüpunkt Allgemein Überschrift.

Die andere Möglichkeit wäre, dies zu tun...

#if DEBUG
    Console.WriteLine("Debug");
#else
    Console.WriteLine("Release");
#endif

15voto

gridtrak Punkte 653

Stellen Sie sicher, dass Sie die Konstante DEBUG in den Project Build Properties definieren. Dadurch wird die #if DEBUG . Ich sehe keine vordefinierte RELEASE-Konstante, was bedeuten könnte, dass alles, was nicht in einem DEBUG-Block steht, im RELEASE-Modus ist.

Define DEBUG constant in Project Build Properties

8voto

McAden Punkte 13272

Entfernen Sie Ihre Definitionen an der Spitze

#if DEBUG
        Console.WriteLine("Mode=Debug"); 
#else
        Console.WriteLine("Mode=Release"); 
#endif

8voto

Ehsan Enaloo Punkte 341

NameSpace

using System.Resources;
using System.Diagnostics;

Methode

   private static bool IsDebug()
    {
        object[] customAttributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(DebuggableAttribute), false);
        if ((customAttributes != null) && (customAttributes.Length == 1))
        {
            DebuggableAttribute attribute = customAttributes[0] as DebuggableAttribute;
            return (attribute.IsJITOptimizerDisabled && attribute.IsJITTrackingEnabled);
        }
        return false;
    }

8voto

LocalPCGuy Punkte 5784

Leicht modifizierte (bastardisierte?) Version der Antwort von Tod Thomson als statische Funktion anstelle einer separaten Klasse (ich wollte in der Lage sein, sie in einem WebForm viewbinding von einer viewutils-Klasse aufzurufen, die ich bereits eingebunden hatte).

public static bool isDebugging() {
    bool debugging = false;

    WellAreWe(ref debugging);

    return debugging;
}

[Conditional("DEBUG")]
private static void WellAreWe(ref bool debugging)
{
    debugging = true;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X