Použitie Visual Studio a súpravy nástrojov na transformáciu textovej šablóny (T4) na automatické generovanie kódu

Stránka aktualizovaná :
Dátum vytvorenia strany :

Prevádzkové prostredie

Visual Studio
  • Visual Studio 2022
.SIEŤ
  • .NET 8.0
Windows
  • Okná 11

Predpoklady

Visual Studio
  • Funguje aj s trochu staršou verziou
.SIEŤ
  • Funguje aj s trochu staršou verziou

Najskôr

Normálne si pri vytváraní kódu myslíte, že kód vytvoríte ručným zadaním znakov, ale ak chcete vytvoriť kód na základe kódu alebo údajov, ktoré je potrebné vytvoriť konkrétnym zákonom, je vhodné ho automaticky vygenerovať. Táto časť popisuje, ako používať súpravu nástrojov na transformáciu textovej šablóny (T4) na automatické generovanie kódu.

Keďže T4 je skriptovací formát, je veľmi jednoduché vygenerovať kód v Visual Studio ihneď po vytvorení súboru T4. Je napísané, že automaticky generuje kód, ale generuje sa len text, takže je možné okrem programov vygenerovať čokoľvek v textovom formáte, ako je XML a JSON.

Hlavným účelom tohto tipu je vysvetliť kroky na skutočné automatické generovanie kódu v T4, takže nebudem zachádzať do podrobností T4 do hĺbky. Ak ste niekedy písali program v jazyku C#, hneď to pochopíte. Ak sa chcete dozvedieť viac o T4, pozrite si oficiálnu webovú stránku a ďalšie stránky.

Predpokladom

Tento tip predpokladá nasledovné:

  • Visual Studio nainštalované vo Windowse
  • Pochopenie jazyka C#

T4 je možné použiť vo väčšine projektov, s výnimkou niekoľkých, takže si počas inštalácie môžete v podstate slobodne vybrať svoju pracovnú záťaž.

Vytvorenie projektu

Ako už bolo spomenuté, T4 je možné použiť vo väčšine projektov, s výnimkou niekoľkých, takže nezáleží na tom, aký typ projektu vytvoríte. V tomto prípade vytvárame projekt pre konzolovú aplikáciu.

Vytvorenie súboru T4 (.tt)

Kliknite pravým tlačidlom myši na súbor projektu alebo priečinok a pridajte novú položku.

Kliknite na tlačidlo Zobraziť všetky šablóny.

Vyberte "Všeobecné" zo stromu vľavo a "Textové šablóny" zo zoznamu v strede. Názov súboru je ľubovoľný.

Ihneď po vytvorení súboru sa môže zobraziť dialógové okno podobné nižšie. Toto sa zobrazí, keď sa automaticky vygeneruje súbor T4. Súbory T4 sa automaticky generujú pri každom uložení alebo zobrazení súboru. Ak chcete vykonať proces automatického generovania tak, ako je, kliknite na tlačidlo "OK". Ak nechcete, aby sa dialógové okno zobrazovalo vždy, začiarknite políčko "Nezobrazovať túto správu znova". Upozorňujeme, že ak je v súbore T4 popísaný nelegálny proces, ako je uvedené v dialógovom okne, vykoná sa zodpovedajúcim spôsobom.

Po pridaní súboru môžete vidieť, že súbor .tt bol pridaný do Prieskumníka riešení.

Obsah súboru je nasledovný.

Ak extrahujete súbor .tt v Prieskumníkovi riešení, zobrazí sa textový súbor s rovnakým názvom. Toto bude automaticky vygenerovaný súbor. Keďže sme ešte nič nenapísali, obsah súboru je prázdny.

Vytvorenie automaticky vygenerovaného súboru na .cs súbor

Ak používate T4, s najväčšou pravdepodobnosťou budete chcieť použiť rozšírenie .cs namiesto predvoleného .txt, pretože kód pre váš program sa vygeneruje automaticky. V takom prípade otvorte súbor .tt a output extension .cs uložte ho pomocou súboru .

Automaticky vygenerovaný súbor by teraz mal mať príponu .cs. Samotný názov súboru je rovnaký ako názov súboru .tt, takže ak ho chcete zmeniť, zmeňte názov súboru .tt.

Zatiaľ niečo napíšte a vypíšte to do automaticky vygenerovaného súboru

V T4 je obsah toho, čo napíšete, v podstate výstupom taký, aký je. <# ... #> je proces T4 a zvyšok je skutočný výstupný text.

Vložme ho napríklad do súboru .tt nasledovne.

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

Keď ho uložíte, automaticky vygenerovaný súbor by mal vyjsť presne tak, ako ste ho napísali.

Výstupom je kód, takže sa dá samozrejme volať aj z Program.cs.

Skúste vygenerovať kód automaticky

Ako už bolo spomenuté vyššie, potvrdil som, že to, čo som napísal, bude výstupom tak, ako to je, ale nelíši sa to od toho, čo som napísal normálne. Teraz skutočne použite skript T4 na automatické vygenerovanie kódu. Existuje široká škála spôsobov, ako to urobiť, preto tu uveďte len stručné vysvetlenie a potom to prerobte podľa svojich predstáv.

Tentoraz ako príklad vytvoríme metódu, ktorá pridá metódu analýzy každého typu do reťazca a vráti ParseXXXX zadanú predvolenú hodnotu, ak ju nie je možné skonvertovať. Toto je len príklad stvorenia, takže ho prosím pridajte, ak máte pocit, že sú tam nejaké časti, ktoré chýbajú.

Ak dokážete rozumieť jazyku C# bez vysvetľovania podrobností, bude to rýchlejšie vidieť, takže najskôr zverejním celý kód.

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

To, čo robíme, je definovanie typov List , ktoré sa majú vytvoriť po prvýkrát pomocou , a potom ich foreach otočíme, aby sme vygenerovali tento počet metód. Skriptovacia časť T4 je napísaná v C#, takže ak rozumiete C#, mali by ste mu rozumieť.

Keď to urobíte, vygeneruje sa nasledujúci kód:

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

To, čo sa generuje, je kód, takže ho môžete použiť vo svojom programe tak, ako je.

Trochu viac o T4

Aj keď časť skriptu T4 môže byť napísaná v jazyku C#, je potrebné oddeliť kód T4 C# od kódu jazyka C#, ktorý je skutočne vygenerovaný. Časť, ktorá robí tento rozdiel, je <# .... #> . <# .... #> je kód, ktorý sa vykonáva ako skript, nie kód, ktorý je v skutočnosti výstupom v časti skriptu T4.

<# .... #> Samotný obsah jazyka C# nie je vysvetlený, pretože sú takí, akí sú, ale <# .... #> existuje niekoľko typov rámcov. Existujú nasledujúce spôsoby, ako ich použiť.

Vysvetlenie kódu
<#@ .... #> Používa sa hlavne pri deklarácii rôznych hlavičiek. Používa sa na začiatku kódu T4 vo vyhlásení assembly a import .
<# .... #> Napíšte kód, ktorý je spracovaný T4. Dá sa rozdeliť na viacero riadkov. Čokoľvek popísané v tomto rozsahu funguje iba ako operácia a nemá vplyv na výstupný text.
<#= .... #> Používa sa, keď chcete ako výstupný výsledok vypísať hodnotu, ako napríklad premennú. string text = "Sample"; Napríklad, ak napíšete premennú <#= text #> s názvom , bude na Sample výstupe.
<#+ .... #> Používa sa na definovanie tried a metód. V zásade je napísaný na konci súboru T4.

O editore T4

Ak nemáte príponu vo Visual Studiu, otvorenie súboru .tt sa zobrazí čiernobielym textom bez farby, čo je dosť ťažko viditeľné.

Niektoré z nich môžu zobrazovať príponu pre súbory .tt ľahko čitateľným spôsobom, preto nájdite tú, ktorá sa vám páči. Keďže ho vytvárajú dobrovoľníci, obsah sa môže meniť v závislosti od ročného obdobia a verzie Visual Studia. Rozšírenia je možné pridať z ponuky Visual Studio v časti Rozšírenia.

Tu je to, čo som videl vo Visual Studio 2022 s rozšírením s názvom "T4 Language".