Wie kann ich bedingt aktivieren, werden die Attribute in C#? "#falls DEBUGGEN" funktioniert nicht
Den guten, alten Präprozessor-Direktive in C# scheinen gut zu funktionieren, wenn ich Schreibe:
#if DEBUG
...
(Some code)
...
#endif
Jedoch, Attribute eingeschlossen in den bedingten block erscheinen, um weiter verarbeitet zu werden, und ich bekomme Fehler, der angibt, wie. Zum Beispiel, um ein [AssemblyVersion(...)]
innerhalb der bedingten block wird keine Auswirkungen haben.
Kann ich ins Detail gehen, warum wir wollen, bedingt das ignorieren der [AssemblyVersion(..)], aber es ist irrelevant. Irgendwelche Ideen?
- Ein Beispiel für dieses Verhalten ist, definieren Sie zwei AssemblyVersion Attribute, und im bedingten "#if DEBUG" - block.
- Das nennt man Präprozessor-Direktive und in C# ist es eigentlich erledigt der compiler.
- Wenn Sie zwei AssemblyVersion-Attribute mit einem innerhalb der "#if DEBUG" - block, ich hoffe, dass der andere sitzt zwischen den "#else" und "#endif"?
- Es ist dynamisch Hinzugefügt wird zur build-Zeit in der release-Konfiguration durch einen automatisierten build-Prozess. BTW, dies ist VS 2008. Das problem geschieht nicht mit einem anderen Projekt, das ich von Grund auf neu erstellt. Dies ist Bizarr.
- Können Sie ein Beispiel, wie die Ausgabe aussieht?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies funktioniert einwandfrei für mich. In meinem AssemblyInfo.cs-Datei, habe ich Folgendes:
Blick auf die kompilierte assembly im Reflektor, sehe ich die richtigen Attribute.
Sollten Sie sicherstellen, dass Ihre DEBUG-symbol ist nur in dem Projekt definierten Eigenschaften und nicht sonst wo in Ihrem code, wie eine aktuelle #define DEBUG Anweisung. Wenn du es direkt im code es wird nur für die Datei, nicht das gesamte Projekt. Definieren Sie in den Projekteigenschaften dazu, dass es im Endeffekt für das gesamte Projekt.
Habe ich es herausgefunden! Es war ein wichtiges Stück von Informationen, die ich vernachlässigt zu erwähnen: es wurde ein Workflow-Projekt (Guid {14822709-B5A1-4724-98CA-57A101D1B079}). Es stellt sich heraus, dass es einen Fehler mit dem workflow-Projekt geben, das speziell den Workflow.Ziele-Datei, die enthalten ist in der build-Datei.
Scheint es, dass der Präprozessor wirkt, als ob die Konstante DEBUG definiert ist. Sie können repro der Ausgabe durch die Schaffung eines workflow-Projekts und fügen Sie diese zu der Datei AssemblyInfo:
Dann versuchen, eine Version zu bauen.
Ich reichte diese mit MS: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=466440
Beste Grüße!
-Sean
Sind Sie sicher, dass Sie nicht Gebäude im release-Modus?
einfacher - Sie können den tag Ihrer debug-Funktion(s) mit dem Metadaten-tag [Bedingte]:
probieren Sie es aus!
Auch, was mir aufgefallen ist, dass
#define
existiert nur im Kontext der Datei definiert ist, ex ruft PrintText2 aus einer anderen Datei, wo die debug nicht definiert ist, wird nicht ausgeführt. Dies funktioniert auch anders herum:UnconditionedFunc wird print "Dies ist PrintText2\n" iff (wenn und nur wenn) #define DEBUG1 definiert wurde, in diese - Datei unabhängig von anderen Dateien.
Gibt es auch System.Diagnostik.Debug, ich bin mir nicht sicher, was es macht.
#define
nur in C# existiert im Rahmen der gleichen Datei, so könnte das die Ursache sein. VS sollte markieren Sie die Zeilen, die nicht kompiliert werden, daher sollten Sie feststellen, einen visuellen Unterschied, wenn es funktioniert, wie Sie es wollen.Follow-up @yoyoyoyosef Kommentar beantworten, müssen Sie überprüfen Sie die Eigenschaften-Seite des Projekts.
Sehen Sie im Bau-Menü unter der Allgemeinen überschrift, stellen Sie sicher, dass die "DEBUG-Konstante Definieren" Kontrollkästchen wird nicht geprüft.
Ändert sich dieser Wert basiert auf dem "Configuration" Auswahl (dropdown) an der Spitze der Menü Erstellen.