Ich habe ein Templating-System, das dem alten ASP-Code ähnelt. Ich führe dies durch eine Klasse, die das gesamte Ding in C # Quellcode umschreibt, kompiliert und schließlich ausführt.
Was ich mich wundere ist, wenn es eine Art # pragma-ähnliche Direktive gibt, kann ich den generierten C # -Code streuen, der Kompilierungsfehler mit den Zeilennummern in meiner Vorlagendatei übereinstimmt?
Nehmen wir zum Beispiel an, ich habe diese erste und einzige Zeile in meinem Vorlagencode:
%Vor%Aber um das zu kompilieren, muss ich einen Namespace, eine Klasse, eine Methode und einen Code für den Kesselblech hinzufügen, so dass diese Zeile oben, die Zeile 1 in meiner Vorlagendatei ist, tatsächlich endet Zeile # 17 (Zufallszahl, nur zur Veranschaulichung) im C # -Code. Der Compilerfehler wird natürlich meinen Fehler als in Zeile # 17 und nicht in Zeile # 1 kennzeichnen.
Ich erinnere mich an eine andere Programmiersprache, die ich vorher benutzt habe (obwohl ich mich nicht mehr erinnern kann), dass es eine Direktive hätte, die ich hinzufügen könnte, die die Zeile mit den Fehlerzeilen in eine Reihe bringen würde.
Gibt es so etwas in C # 3.5?
Sie haben die #line
Präprozessordirektive .
Mit
#line
können Sie die Zeilennummer des Compilers und (optional) den Dateinamen für Fehler und Warnungen ändern.Die
#line directive
könnte in einem automatisierten Zwischenschritt im Build-Prozess verwendet werden. Wenn z. B. Zeilen aus der ursprünglichen Quellcodedatei entfernt wurden, der Compiler jedoch die Ausgabe basierend auf der ursprünglichen Zeilennummerierung in der Datei generieren soll, können Sie Zeilen entfernen und dann die ursprüngliche Zeilennummerierung mit#line
.Die Anweisung
#line hidden
blendet die aufeinanderfolgenden Zeilen des Debuggers aus, sodass beim Durchlaufen des Codes durch den Entwickler alle Zeilen zwischen#line hidden
und der nächsten#line
-Direktive (vorausgesetzt, dass Es ist keine weitere #line versteckte Richtlinie) wird übergangen werden. Diese Option kann auch verwendet werden, um ASP.NET die Unterscheidung zwischen benutzerdefiniertem und maschinengeneriertem Code zu ermöglichen. Obwohl ASP.NET der Hauptabnehmer dieser Funktion ist, wird es wahrscheinlich von mehr Quellgeneratoren verwendet.Eine Anweisung
#line hidden
wirkt sich nicht auf Dateinamen oder Zeilennummern in der Fehlerberichterstattung aus. Das heißt, wenn ein Fehler in einem ausgeblendeten Block auftritt, meldet der Compiler den aktuellen Dateinamen und die Zeilennummer des Fehlers.Die Anweisung
#line filename
gibt den Dateinamen an, der in der Compilerausgabe angezeigt werden soll. Standardmäßig wird der tatsächliche Name der Quellcodedatei verwendet. Der Dateiname muss in doppelten Anführungszeichen ("") stehen und muss mit einer Zeilennummer beginnen.
Tags und Links c# code-generation line-numbers pragma