Gibt es eine# Pragma oder eine ähnliche Anweisung für generierten C# -Codes, um Vorlagen -Code -Zeilennummern mit C# Zeilennummer zu entsprechen?
-
20-09-2019 - |
Frage
Ich habe ein Vorlagensystem, das dem ASP-Code im alten Stil ähnelt. Ich führe dies durch eine Klasse aus, die das Ganze in C# Quellcode umschreibt, kompiliert und schließlich ausführt.
Ich frage mich, ob es eine Art Pragma-ähnliche Richtlinie gibt, die ich den generierten C # -Code bestreuen kann, mit dem Kompilierfehler mit den Zeilennummern in meiner Vorlagendatei übereinstimmen.
Nehmen wir zum Beispiel an, ich habe diese erste und einzige Zeile in meinem Vorlagencode:
Object o = datta; // should be data, compiler error
Aber um dies zu kompilieren, muss ich einen Namespace, eine Klasse, eine Methode und einen Boiler-Plate-Code hinzuzufügen, so (Zufällige Zahl, nur für veranschaulichende Zwecke) im C# Code. Der Compiler -Fehler kennzeichnet natürlich meinen Fehler in Zeile Nr. 17 und nicht in Zeile 1.
Ich erinnere mich aus einer anderen Programmiersprache, die ich zuvor verwendet habe (obwohl ich mich nicht erinnern kann, welches), dass es eine Richtlinie hatte, die ich hinzufügen konnte, die die Fehlerzeilennummern aufstellen würde.
Gibt es so etwas in C# 3.5?
Lösung
Du hast die #line
Präprozessorrichtlinie.
#line
Sie können die Zeilennummer des Compiler und (optional) die Dateinamenausgabe für Fehler und Warnungen ändern.Das
#line directive
Kann in einem automatisierten Zwischenschritt im Build -Prozess verwendet werden. Wenn beispielsweise Zeilen aus der ursprünglichen Quellcodedatei entfernt wurden, der Compiler jedoch auch die Ausgabe basierend auf der ursprünglichen Zeilennummerierung in der Datei generiert, können Sie Zeilen entfernen und dann die ursprüngliche Zeilennummerierung simulieren#line
.Das
#line hidden
Die Richtlinie verbirgt die aufeinanderfolgenden Zeilen aus dem Debugger, so dass, wenn der Entwickler durch den Code tritt, alle Zeilen zwischen a#line hidden
und der nächste#line
Die Richtlinie (unter der Annahme, dass es sich nicht um eine weitere #line versteckte Richtlinie handelt) wird übertrifft. Diese Option kann auch verwendet werden, um ASP.NET zwischen benutzerdefinierter und maschinengenerierter Code zu differenzieren. Obwohl ASP.NET der Hauptverbraucher dieser Funktion ist, nutzen mehr Quellgeneratoren davon.EIN
#line hidden
Die Richtlinie wirkt sich in der Fehlerberichterstattung nicht auf Dateinamen oder Zeilennummern aus. Das heißt, wenn ein Fehler in einem versteckten Block auftritt, meldet der Compiler den aktuellen Dateinamen und die Zeilennummer des Fehlers.Das
#line filename
Die Richtlinie gibt den Dateinamen an, den Sie im Compiler -Ausgang erscheinen möchten. Standardmäßig wird der tatsächliche Name der Quellcode -Datei verwendet. Der Dateiname muss in doppelten Anführungszeichen ("") sein und eine Zeilennummer vorangestellt werden.