Freigeben über


Der Textvorlagentransformationsprozess

Der Textvorlagentransformationsprozess verwendet eine Textvorlagendatei als Eingabe und generiert eine neue Textdatei als Ausgabe. Sie können beispielsweise Textvorlagen verwenden, um Visual Basic- oder C#-Code zu generieren, oder Sie können einen HTML-Bericht generieren.

Drei Komponenten nehmen an diesem Prozess teil: das Modul, der Host und die Direktivenprozessoren. Der Motor steuert den Prozess; sie interagiert mit dem Host und dem Direktivenprozessor, um die Ausgabedatei zu erzeugen. Der Host stellt jede Interaktion mit der Umgebung bereit, z. B. das Suchen von Dateien und Assemblys. Der Direktivenprozessor fügt Funktionen hinzu, z. B. das Lesen von Daten aus einer XML-Datei oder einer Datenbank.

Der Textvorlagentransformationsprozess wird in zwei Schritten ausgeführt. Zunächst erstellt das Modul eine temporäre Klasse, die als generierte Transformationsklasse bezeichnet wird. Diese Klasse enthält den Code, der von den Direktiven und Steuerelementblöcken generiert wird. Danach kompiliert und führt das Modul die generierte Transformationsklasse aus, um die Ausgabedatei zu erzeugen.

Komponenten

Komponente Description Anpassbar (Ja/Nein)
Engine Die Motorkomponente steuert den Textvorlagentransformationsprozess. Nein.
Host Der Host ist die Schnittstelle zwischen dem Modul und der Benutzerumgebung. Visual Studio ist ein Host des Texttransformationsprozesses. Ja. Sie können einen benutzerdefinierten Host schreiben.
Direktivenprozessoren Direktivenverarbeiter sind Klassen, die Direktiven in Textvorlagen behandeln. Mithilfe von Direktiven können Sie Daten aus einer Eingabequelle einer Textvorlage bereitstellen. Ja. Sie können benutzerdefinierte Direktivenprozessoren schreiben.

Der Motor

Das Modul empfängt die Vorlage als Zeichenfolge vom Host, die alle Dateien verarbeitet, die im Transformationsprozess verwendet werden. Das Modul fordert dann den Host auf, nach benutzerdefinierten Direktivenprozessoren und anderen Aspekten der Umgebung zu suchen. Das Modul kompiliert und führt die generierte Transformationsklasse aus. Das Modul gibt den generierten Text an den Host zurück, der den Text normalerweise in einer Datei speichert.

Der Host

Der Host ist für alles verantwortlich, was sich auf die Umgebung außerhalb des Transformationsprozesses bezieht, einschließlich der folgenden:

  • Suchen von Text- und Binärdateien, die vom Modul oder einem Direktivenprozessor angefordert werden. Der Host kann Verzeichnisse und den globalen Assemblycache durchsuchen, um Assemblys zu finden. Der Host kann benutzerdefinierten Direktivenprozessorcode für die Engine lokalisieren. Der Host kann textdateien auch suchen und lesen und deren Inhalt als Zeichenfolgen zurückgeben.

  • Bereitstellen von Listen mit Standardassemblys und Namespaces, die vom Modul zum Erstellen der generierten Transformationsklasse verwendet werden.

  • Bereitstellen der Anwendungsdomäne, die beim Kompilieren und Ausführen der generierten Transformationsklasse verwendet wird. Eine separate Anwendungsdomäne wird verwendet, um die Hostanwendung vor Fehlern im Vorlagencode zu schützen.

  • Schreiben der generierten Ausgabedatei.

  • Festlegen der Standarderweiterung für die generierte Ausgabedatei.

  • Behandeln von Fehlern bei der Textvorlagentransformation. Beispielsweise kann der Host die Fehler auf der Benutzeroberfläche anzeigen oder in eine Datei schreiben. (In Visual Studio werden Fehler im Fehlermeldungsfenster angezeigt.)

  • Bereitstellen eines erforderlichen Parameterwerts, wenn ein Benutzer eine Direktive aufgerufen hat, ohne einen Wert bereitzustellen. Der Direktivenprozessor kann den Namen der Direktive und den Parameter angeben und den Host auffordern, einen Standardwert anzugeben, wenn er über einen verfügt.

Richtlinien und Richtlinienverarbeiter

Eine Direktive ist ein Befehl in Ihrer Textvorlage. Es stellt Parameter für den Generierungsprozess bereit. In der Regel definieren Direktiven die Quelle und den Typ des Modells oder einer anderen Eingabe sowie die Dateinamenerweiterung der Ausgabedatei.

Ein Direktivenverarbeiter kann eine oder mehrere Direktiven verarbeiten. Wenn Sie eine Vorlage transformieren, müssen Sie einen Direktivenprozessor installiert haben, der mit den Direktiven in Ihrer Vorlage umgehen kann.

Direktiven funktionieren durch Hinzufügen von Code in der generierten Transformationsklasse. Sie rufen Direktiven aus einer Textvorlage auf, und das Modul verarbeitet alle Direktivenaufrufe, wenn sie die generierte Transformationsklasse erstellt. Nachdem Sie eine Direktive erfolgreich aufgerufen haben, kann der rest des Codes, den Sie in Ihrer Textvorlage schreiben, von der Funktionalität abhängig sein, die die Direktive bereitstellt. Sie können beispielsweise den folgenden Aufruf der import-Direktive in Ihrer Vorlage verwenden:

<#@ import namespace="System.Text" #>

Der Standarddirektiveprozessor konvertiert dies in eine using Anweisung in der generierten Transformationsklasse. Anschließend können Sie die StringBuilder Klasse im restlichen Vorlagencode verwenden, ohne sie als qualifizieren zu System.Text.StringBuildermüssen.