Verwenden von Visual Studio und dem Text Template Transformation Toolkit (T4) zum automatischen Generieren von Code

Diese Seite wurde aktualisiert :
Erstellungsdatum der Seite :

Betriebsumgebung

Visuelles Studio
  • Visual Studio 2022
.NETTO
  • .NET 8.0
Fenster
  • Mit Windows 11

Voraussetzungen

Visuelles Studio
  • Es funktioniert sogar mit einer etwas älteren Version
.NETTO
  • Es funktioniert sogar mit einer etwas älteren Version

Zuerst

Normalerweise denken Sie beim Erstellen eines Codes, dass Sie einen Code erstellen, indem Sie Zeichen manuell eingeben, aber wenn Sie einen Code erstellen möchten, der auf Code oder Daten basiert, die durch ein bestimmtes Gesetz erstellt werden müssen, ist es praktisch, ihn automatisch generieren zu können. In diesem Abschnitt wird beschrieben, wie Sie das Text Template Transformation Toolkit (T4) verwenden, um automatisch Code zu generieren.

Da es sich bei T4 um ein Skriptformat handelt, ist es sehr einfach, Code in Visual Studio unmittelbar nach dem Erstellen einer T4-Datei zu generieren. Es wird geschrieben, dass es automatisch Code generiert, aber was generiert wird, ist nur Text, so dass es möglich ist, zusätzlich zu Programmen alles im Textformat wie XML und JSON zu generieren.

Der Hauptzweck dieses Tipps besteht darin, die Schritte zum automatischen Generieren von Code in T4 zu erklären, daher werde ich nicht auf die Details von T4 eingehen. Wenn Sie jemals ein Programm in C# geschrieben haben, werden Sie es sofort verstehen. Wenn Sie mehr über T4 erfahren möchten, besuchen Sie bitte die offizielle Website und andere Websites.

Vorbedingung

Dieser Tipp setzt Folgendes voraus:

  • Visual Studio unter Windows installiert
  • Verständnis von C#

T4 kann in den meisten Projekten eingesetzt werden, mit Ausnahme einiger weniger, so dass Sie bei der Installation grundsätzlich frei über Ihren Arbeitsaufwand entscheiden können.

Erstellen eines Projekts

Wie bereits erwähnt, kann T4 in den meisten Projekten verwendet werden, mit Ausnahme einiger weniger, so dass es keine Rolle spielt, welche Art von Projekt Sie erstellen. In diesem Fall erstellen wir ein Projekt für eine Konsolen-App.

Erstellen einer T4-Datei (.tt)

Klicken Sie mit der rechten Maustaste auf eine Projektdatei oder einen Projektordner, um ein neues Element hinzuzufügen.

Klicken Sie auf die Schaltfläche Alle Vorlagen anzeigen.

Wählen Sie "Allgemein" aus dem Baum auf der linken Seite und "Textvorlagen" aus der Liste in der Mitte. Der Dateiname ist beliebig.

Unmittelbar nach dem Erstellen der Datei wird möglicherweise ein Dialogfeld ähnlich dem folgenden angezeigt. Dies wird angezeigt, wenn die T4-Datei automatisch generiert wird. T4-Dateien werden jedes Mal automatisch generiert, wenn die Datei gespeichert oder angezeigt wird. Wenn Sie den automatischen Generierungsprozess so durchführen möchten, klicken Sie auf die Schaltfläche "OK". Wenn Sie nicht möchten, dass das Dialogfeld jedes Mal angezeigt wird, aktivieren Sie "Diese Meldung nicht mehr anzeigen". Bitte beachten Sie, dass, wenn ein illegaler Prozess in der T4-Datei beschrieben wird, wie im Dialog angegeben, dieser entsprechend ausgeführt wird.

Nachdem Sie die Datei hinzugefügt haben, können Sie sehen, dass die TT-Datei dem Projektmappen-Explorer hinzugefügt wurde.

Der Inhalt der Datei lautet wie folgt.

Wenn Sie die TT-Datei im Projektmappen-Explorer extrahieren, wird eine Textdatei mit demselben Namen angezeigt. Dies ist die automatisch generierte Datei. Da wir noch nichts geschrieben haben, ist der Inhalt der Datei leer.

Festlegen einer automatisch generierten Datei in eine .cs Datei

Wenn Sie T4 verwenden, möchten Sie höchstwahrscheinlich die Erweiterung .cs anstelle der Standarderweiterung .txt verwenden, da der Code für Ihr Programm automatisch generiert wird. Öffnen Sie in diesem Fall die .tt-Datei, und output extension .cs speichern Sie sie mit .

Die automatisch generierte Datei sollte jetzt die Erweiterung .cs haben. Der Dateiname selbst ist derselbe wie der der .tt-Datei, wenn Sie ihn also ändern möchten, ändern Sie den Namen der .tt-Datei.

Schreiben Sie vorerst etwas und geben Sie es in eine automatisch generierte Datei aus

In T4 wird der Inhalt dessen, was Sie schreiben, im Grunde so ausgegeben, wie er ist. <# ... #> ist der T4-Prozess, und der Rest ist der eigentliche Ausgabetext.

Fügen wir es zum Beispiel wie folgt in eine .tt-Datei ein.

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".cs" #>

public static class Sample
{
  public static void Hello()
  {
    Console.WriteLine("Hello T4!!");
  }
}

Wenn Sie sie speichern, sollte die automatisch generierte Datei genau so ausgegeben werden, wie Sie sie geschrieben haben.

Die Ausgabe ist Code, kann also natürlich auch von Program.cs aus aufgerufen werden.

Versuchen Sie, Code automatisch zu generieren

Wie oben erwähnt, habe ich bestätigt, dass das, was ich geschrieben habe, so ausgegeben wird, wie es ist, aber das unterscheidet sich nicht von dem, was ich normalerweise geschrieben habe. Lassen Sie uns nun das T4-Skript verwenden, um den Code automatisch zu generieren. Es gibt eine Vielzahl von Möglichkeiten, es zu machen, also geben Sie hier bitte nur eine kurze Erklärung und machen Sie es dann so, wie Sie es möchten.

Dieses Mal erstellen wir als Beispiel eine Methode, die der Zeichenfolge eine Analysemethode jedes Typs hinzufügt und den angegebenen Standardwert zurückgibt ParseXXXX , wenn sie nicht konvertiert werden kann. Dies ist nur ein Beispiel für Schöpfung, also füge es bitte hinzu, wenn du das Gefühl hast, dass Teile fehlen.

Wenn Sie C# verstehen können, ohne die Details zu erklären, wird es schneller zu sehen sein, daher werde ich zuerst den vollständigen Code veröffentlichen.

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".cs" #>

<#
  List<string> types = new(){"Int", "Short", "Long", "Float", "Double", "Decimal"}; 
#>

public static class ParseExtensions
{
<# foreach (var type in types) { #>
<#   var typeLower = type.ToLower(); #>
  public static <#= typeLower #> Parse<#= type #>(this string self, <#= typeLower #> defaultValue)
  {
    return <#= typeLower #>.TryParse(self, out var val) ? val : defaultValue;
  }
<# } #>
}

Was wir tun, ist, die Typen List zum ersten Mal zu definieren, die mit erstellt werden sollen, und sie foreach dann mit umzudrehen, um diese Anzahl von Methoden zu generieren. Der Skriptteil von T4 ist in C# geschrieben, wenn Sie also C# verstehen, sollten Sie in der Lage sein, es zu verstehen.

Wenn Sie dies tun, wird der folgende Code generiert:

public static class ParseExtensions
{
  public static int ParseInt(this string self, int defaultValue)
  {
    return int.TryParse(self, out var val) ? val : defaultValue;
  }
  public static short ParseShort(this string self, short defaultValue)
  {
    return short.TryParse(self, out var val) ? val : defaultValue;
  }
  public static long ParseLong(this string self, long defaultValue)
  {
    return long.TryParse(self, out var val) ? val : defaultValue;
  }
  public static float ParseFloat(this string self, float defaultValue)
  {
    return float.TryParse(self, out var val) ? val : defaultValue;
  }
  public static double ParseDouble(this string self, double defaultValue)
  {
    return double.TryParse(self, out var val) ? val : defaultValue;
  }
  public static decimal ParseDecimal(this string self, decimal defaultValue)
  {
    return decimal.TryParse(self, out var val) ? val : defaultValue;
  }
}

Was generiert wird, ist Code, so dass Sie ihn in Ihrem Programm so verwenden können, wie er ist.

Ein bisschen mehr über den T4

Obwohl der T4-Skriptteil in C# geschrieben werden kann, ist es notwendig, den T4 C#-Code vom tatsächlich generierten C#-Code zu trennen. Der Teil, der diese Unterscheidung macht, ist <# .... #> . <# .... #> ist der Code, der als Skript ausgeführt wird, nicht der Code, der tatsächlich im Skriptteil von T4 ausgegeben wird.

<# .... #> Der Inhalt von C# selbst wird nicht erklärt, da er so ist, wie er ist, aber <# .... #> es gibt verschiedene Arten von Frames. Es gibt die folgenden Möglichkeiten, sie zu verwenden.

Erläuterung des Codes
<#@ .... #> Es wird hauptsächlich bei der Deklaration verschiedener Header verwendet. Es wird am Anfang des T4-Codes in der assembly Deklaration von und import verwendet.
<# .... #> Schreiben Sie Code, der von T4 verarbeitet wird. Es kann in mehrere Zeilen unterteilt werden. Alles, was in diesem Bereich beschrieben wird, fungiert nur als Operation und wirkt sich nicht auf den Ausgabetext aus.
<#= .... #> Dies wird verwendet, wenn Sie einen Wert, z. B. eine Variable, als Ausgabeergebnis ausgeben möchten. string text = "Sample"; Wenn Sie beispielsweise eine Variable <#= text #> mit dem Namen schreiben, wird Sample ausgegeben.
<#+ .... #> Wird verwendet, um Klassen und Methoden zu definieren. Grundsätzlich wird es am Ende der T4-Datei geschrieben.

Über den T4-Editor

Wenn Sie nicht über eine Erweiterung in Visual Studio verfügen, wird das Öffnen einer TT-Datei in Schwarzweißtext ohne Farbe angezeigt, was ziemlich schwer zu erkennen ist.

Einige von ihnen zeigen möglicherweise eine Erweiterung für .tt-Dateien in einer leicht lesbaren Weise an, also suchen Sie bitte diejenige, die Ihnen gefällt. Da er von Freiwilligen erstellt wird, kann sich der Inhalt je nach Jahreszeit und Version von Visual Studio ändern. Erweiterungen können über das Visual Studio-Menü unter Erweiterungen hinzugefügt werden.

Folgendes habe ich in Visual Studio 2022 mit einer Erweiterung namens "T4 Language" gesehen.