2010-07-02 9 views
6

In einem Softwareprojekt, an dem ich arbeite, sind viele Codezeilen verstreut, die für Debugging- und Utility-Zwecke geschrieben wurden. Bevor ich meinen Code kompiliere, möchte ich auswählen, ob diese Codeblöcke in meine Kompilierung einbezogen werden sollen (etwas, das keine Navigation durch den Code erfordert). Wie kann ich das machen?Wie kann ich bestimmte Codezeilen einfach von einer Kompilierung ausschließen?

Ich bin Programmierung in C# und Microsoft Visual Studio 2010.

Antwort

13

Pop [Conditional("DEBUG")] auf Methoden, die nur in Ihrem Debug-Build ausgeführt werden sollen. Weitere Informationen finden Sie unter here.

+1

+1. IMVHO, das ist der sauberste Weg. – womp

+0

Ich war nicht vertraut mit diesem bedingten Debug-Attribut, sehr glatt. – CrimsonX

+0

Gleich - hatte noch nichts davon gehört. Nett! – RQDQ

7

würde ich vorschlagen, Ihre Blöcke in #ifdef SOMETHING und #endif umschließt, und dann SOMETHING in den Projekteinstellungen definieren, wenn Sie diesen Block in Ihrer Kompilierung enthalten sein sollen .

7

Sie benötigen Präprozessordirektiven oder bedingte Kompilierungsanweisungen. Sie können über sie lesen here.

Ein Beispiel aus dieser Verbindung:

#define TEST 
using System; 
public class MyClass 
{ 
    public static void Main() 
    { 
     #if (TEST) 
      Console.WriteLine("TEST is defined"); 
     #else 
      Console.WriteLine("TEST is not defined"); 
     #endif 
    } 
} 

Der Code nur dann, wenn TEST definiert ist am oberen Ende des Code kompiliert wird. Viele Entwickler verwenden #define DEBUG, damit sie den Debug-Code aktivieren und ihn wieder entfernen können, indem sie nur diese eine Zeile oben ändern.

+7

Wenn Sie Build-Konfigurationen in Visual Studio verwenden, definiert die Debug-Buildkonfiguration (standardmäßig) DEBUG und die Release-Buildkonfiguration nicht. Sie müssen sie nicht manuell definieren. – Toby

1

Wenn sie für die Fehlersuche sind, dann ist die einzige akzeptable Lösung ist mit einem solchen Code zu umgeben:

#ifdef DEBUG 

#endif 

Dies stellt sicher, dass der Code enthalten ist, wenn Sie kompilieren im Debug-Modus, aber im Freigabemodus ausgeschlossen.

+1

Es gibt sicherlich andere akzeptable Lösungen. Das bedingte Attribut macht das Gleiche und wäre (zumindest für mich) den Richtlinien vorzuziehen, da Richtlinien nach meiner Erfahrung mit Code-Analyse-Tools von Drittanbietern verwechselt werden. – womp

1

Sie sollten in Betracht ziehen, diese Debugging-Funktionen vollständig aus den Klassen zu entfernen. Wenn Sie Ihre Klassen zwischen Debug- und Release-Modus "ändern", kann dies zu Problemen führen.

Sie könnten eine separate "Debug" -Assembly erstellen, die alle Ihre Debugging-Helfer enthält - dann stellen Sie nur sicher, dass Sie sie aus der Lösung ausschließen und ohne sie erfolgreich erstellen können.

3

Verwenden Sie the Debug class zur bedingten Protokollierung, Assertion usw. Dies hat viele Vorteile. Sie können wählen, ob Sie zur Laufzeit protokollieren möchten (oder nicht). Sie beschränken Sie auf (meist) nicht-verhaltensändernde Aktionen, indem Sie einige der (gültigen) Bedenken von @ STW ansprechen. Sie ermöglichen die Verwendung von Protokollierungswerkzeugen von Drittanbietern.

Verwandte Themen