A Visual Studio és a Text Template Transformation Toolkit (T4) használata kód automatikus létrehozásához

Oldal frissítve :
Oldal létrehozásának dátuma :

Működési környezet

Visual Studio
  • Visual Studio 2022
.HÁLÓ
  • .NET 8.0
Windows
  • Windows 11 esetén

Előfeltételek

Visual Studio
  • Még egy kicsit régebbi verzióval is működik
.HÁLÓ
  • Még egy kicsit régebbi verzióval is működik

Először

Általában egy kód létrehozásakor úgy gondolja, hogy kódot hoz létre a karakterek kézi beírásával, de ha olyan kódot szeretne létrehozni, amely olyan kódon vagy adatokon alapul, amelyeket egy adott törvénynek kell létrehoznia, akkor kényelmes, ha automatikusan létrehozza. Ez a szakasz azt ismerteti, hogyan használható a Text Template Transformation Toolkit (T4) kód automatikus létrehozására.

Mivel a T4 egy parancsfájl-formátum, a T4-fájl létrehozása után nagyon könnyű kódot generálni a Visual Studióban. Azt írják, hogy automatikusan generál kódot, de ami generálódik, az csak szöveg, így a programokon kívül bármit is generálhat szöveges formátumban, például XML-ben és JSON-ban.

Ennek a tippnek a fő célja, hogy elmagyarázza a T4 kód automatikus generálásának lépéseit, ezért nem megyek bele mélyebben a T4 részleteibe. Ha valaha is írt programot C# nyelven, azonnal meg fogja érteni. Ha többet szeretne megtudni a T4-ről, kérjük, ellenőrizze a hivatalos weboldalt és más webhelyeket.

előfeltétel

Ez a tipp a következőket feltételezi:

  • Windows rendszerre telepített Visual Studio
  • A C# megértése

A T4 néhány projekt kivételével a legtöbb projektben használható, így alapvetően szabadon választhatja meg a munkaterhelést a telepítés során.

Projekt létrehozása

Mint korábban említettük, a T4 a legtöbb projektben használható, néhány kivételével, így nem számít, milyen típusú projektet hoz létre. Ebben az esetben egy konzolalkalmazáshoz hozunk létre projektet.

T4 fájl (.tt) létrehozása

Kattintson a jobb gombbal egy projektfájlra vagy mappára egy új elem hozzáadásához.

Kattintson az Összes sablon megtekintése gombra.

Válassza az "Általános" lehetőséget a bal oldali fáról, és a "Szöveges sablonok" lehetőséget a középső listából. A fájlnév tetszőleges.

Közvetlenül a fájl létrehozása után az alábbihoz hasonló párbeszédpanel jelenhet meg. Ez akkor jelenik meg, ha a T4 fájl automatikusan létrejön. A T4 fájlok automatikusan létrejönnek minden alkalommal, amikor a fájlt mentik vagy megtekintik. Ha az automatikus generálási folyamatot úgy szeretné végrehajtani, ahogy van, kattintson az "OK" gombra. Ha nem szeretné, hogy a párbeszédpanel minden alkalommal megjelenjen, jelölje be a "Ne jelenjen meg többé ez az üzenet" jelölőnégyzetet. Kérjük, vegye figyelembe, hogy ha egy illegális folyamat van leírva a T4 fájlban a párbeszédablakban leírtak szerint, akkor azt ennek megfelelően hajtják végre.

A fájl hozzáadása után láthatja, hogy a .tt fájl hozzá lett adva a Solution Explorer (Megoldáskezelő) programhoz.

A fájl tartalma a következő.

Ha kibontja a .tt fájlt a Solution Explorer (Megoldáskezelő) ablakban, egy azonos nevű szövegfájlt fog látni. Ez lesz az automatikusan létrehozott fájl. Mivel még nem írtunk semmit, a fájl tartalma üres.

Automatikusan létrehozott fájl .cs fájllá alakítása

Ha T4-et használ, akkor valószínűleg az .cs kiterjesztést szeretné használni az alapértelmezett .txt helyett, mivel a program kódja automatikusan létrejön. Ebben az esetben nyissa meg a .tt fájlt, és output extension .cs mentse a mappába.

Az automatikusan létrehozott fájlnak most .cs kiterjesztéssel kell rendelkeznie. Maga a fájlnév megegyezik a .tt fájl nevével, ezért ha módosítani szeretné, módosítsa a .tt fájl nevét.

Egyelőre írjon valamit, és adja ki egy automatikusan generált fájlba

A T4-ben az Ön által írt tartalom alapvetően úgy jelenik meg, ahogy van. <# ... #> a T4 folyamat, a többi pedig a tényleges kimeneti szöveg.

Tegyük például egy .tt fájlba az alábbiak szerint.

<#@ 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!!");
  }
}

Mentéskor az automatikusan létrehozott fájlnak pontosan úgy kell megjelennie, ahogy írta.

A kimenet kód, így természetesen Program.cs-ből is hívható.

Kód automatikus generálásának megkísérlése

Mint fentebb említettem, megerősítettem, hogy amit írtam, az úgy lesz kiadva, ahogy van, de ez nem különbözik attól, amit általában írtam. Most valójában használjuk a T4 szkriptet a kód automatikus létrehozásához. Számos módja van annak, hogy elkészítse, ezért kérjük, csak itt adjon rövid magyarázatot, majd alakítsa át úgy, ahogy szeretné.

Ezúttal példaként hozzunk létre egy metódust, amely hozzáad egy elemzési metódust minden típusból a sztringhez, és visszaadja ParseXXXX a megadott alapértelmezett értéket, ha az nem konvertálható. Ez csak egy példa a teremtésre, ezért kérlek, add hozzá, ha úgy érzed, hogy vannak olyan részek, amelyek hiányoznak.

Ha meg tudod érteni a C#-ot anélkül, hogy elmagyaráznád a részleteket, akkor gyorsabban láthatod, ezért először a teljes kódot teszem közzé.

<#@ 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;
  }
<# } #>
}

Amit csinálunk, az az, hogy először definiáljuk azokat a típusokat List , amelyeket a -vel kell létrehozni, majd megfordítjuk őket foreach a -val, hogy ennyi metódust generáljunk. A T4 szkript része C# nyelven íródott, így ha érti a C#-ot, akkor meg kell értenie.

Ekkor a következő kód jön létre:

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;
  }
}

A generált kód kód, így használhatja a programban úgy, ahogy van.

Egy kicsit többet a T4-ről

Annak ellenére, hogy a T4 szkriptrész C# nyelven írható, el kell különíteni a T4 C# kódot a ténylegesen generált C# kódtól. Az a rész, amely ezt a megkülönböztetést teszi, . <# .... #> <# .... #> a parancsfájlként végrehajtott kód, nem pedig a T4 parancsfájl részében ténylegesen kimenetként megjelenő kód.

<# .... #> Magát a C# tartalmát nem magyarázzák el, mert olyanok, amilyenek, de <# .... #> többféle keret létezik. Mindegyik használatának következő módjai vannak.

Kód magyarázata
<#@ .... #> Elsősorban különböző fejlécek deklarálására használják. A T4 kód elején használatos az és import nyilatkozatábanassembly.
<# .... #> Írja be a T4 által feldolgozott kódot. Több sorra osztható. Az ebben a tartományban leírtak csak műveletként működnek, és nincsenek hatással a kimeneti szövegre.
<#= .... #> Ez akkor használatos, ha egy értéket, például egy változót szeretne kimeneti eredményként kiadni. string text = "Sample"; Ha például egy nevű változót <#= text #> ír, akkor a kimenet lesz Sample .
<#+ .... #> Osztályok és metódusok meghatározására szolgál. Alapvetően a T4 fájl végén van írva.

A T4 szerkesztő

Ha nincs kiterjesztése a Visual Studio, a .tt fájl megnyitása fekete-fehér szöveggel jelenik meg, szín nélkül, ami meglehetősen nehezen látható.

Némelyikük könnyen olvasható módon megjelenítheti a .tt fájlok kiterjesztését, ezért kérjük, keresse meg a kívántat. Mivel önkéntesek készítik, a tartalom az évszaktól és a Visual Studio verziójától függően változhat. A bővítmények a Visual Studio Bővítmények menüjéből adhatók hozzá.

Ezt láttam a Visual Studio 2022-ben a "T4 Language" nevű bővítménnyel.