Koodi automaatseks genereerimiseks kasutage Visual Studiot ja tekstimallide teisendamise tööriistakomplekti (T4)

Lehekülg uuendatud :
Lehe loomise kuupäev :

Töökeskkond

Visuaalne stuudio
  • Visual Studio 2022
.NET
  • .NET 8.0
Windows
  • Windows 11

Eeltingimused

Visuaalne stuudio
  • See töötab isegi mõnevõrra vanema versiooniga
.NET
  • See töötab isegi mõnevõrra vanema versiooniga

Alguses

Tavaliselt arvate koodi loomisel, et loote koodi, sisestades tähemärgid käsitsi, kuid kui soovite luua koodil või andmetel, mis tuleb luua konkreetse seadusega, on mugav seda automaatselt genereerida. Selles jaotises kirjeldatakse, kuidas kasutada tekstimalli teisendamise tööriistakomplekti (T4) koodi automaatseks loomiseks.

Kuna T4 on skriptivorming, on Visual Studios koodi genereerimine väga lihtne kohe pärast T4-faili loomist. On kirjutatud, et see genereerib koodi automaatselt, kuid see, mis genereeritakse, on lihtsalt tekst, nii et lisaks programmidele on võimalik genereerida ka midagi tekstivormingus, näiteks XML ja JSON.

Selle näpunäite peamine eesmärk on selgitada samme, kuidas T4-s kood tegelikult automaatselt genereerida, nii et ma ei lähe T4 üksikasjadesse põhjalikult. Kui olete kunagi kirjutanud programmi C#, saate sellest kohe aru. Kui soovite T4 kohta rohkem teada saada, kontrollige ametlikku veebisaiti ja muid saite.

eeltingimus

See näpunäide eeldab järgmist:

  • Visual Studio installiti Windowsi
  • C# mõistmine

T4 saab kasutada enamikus projektides, välja arvatud mõned, nii et põhimõtteliselt võite installimise ajal oma töökoormust valida.

Projekti loomine

Nagu varem mainitud, saab T4 kasutada enamikus projektides, välja arvatud mõned, seega pole vahet, millist tüüpi projekti loote. Sel juhul loome konsoolirakenduse projekti.

T4-faili (.tt) loomine

Uue üksuse lisamiseks paremklõpsake projektifaili või kausta.

Klõpsake nuppu Kuva kõik mallid.

Valige vasakul asuvast puust "Üldine" ja keskel olevast loendist "Tekstimallid". Faili nimi on meelevaldne.

Kohe pärast faili loomist võite näha allpool toodud dialoogiga sarnast dialoogi. See kuvatakse T4-faili automaatsel genereerimisel. T4-failid luuakse automaatselt iga kord, kui fail salvestatakse või vaadatakse. Kui soovite automaatset genereerimisprotsessi teostada nii, nagu see on, klõpsake nuppu "OK". Kui te ei soovi, et dialoog iga kord kuvataks, märkige ruut "Ära kuva seda sõnumit enam". Pange tähele, et kui T4-failis kirjeldatakse ebaseaduslikku protsessi, nagu dialoogis märgitud, käivitatakse see vastavalt.

Pärast faili lisamist näete, et .tt fail on lisatud Solution Explorerisse.

Faili sisu on järgmine.

Kui ekstraktite .tt-faili Solution Exploreris, näete sama nimega tekstifaili. See on automaatselt loodud fail. Kuna me pole veel midagi kirjutanud, on faili sisu tühi.

Automaatselt loodud faili muutmine .cs failiks

Kui kasutate T4, soovite tõenäoliselt kasutada vaike.txt asemel laiendust .cs, kuna teie programmi kood luuakse automaatselt. Sellisel juhul avage .tt fail ja output extension .cs salvestage see .

Automaatselt loodud failil peaks nüüd olema .cs laiend. Faili nimi ise on sama, mis .tt-failil, nii et kui soovite seda muuta, muutke .tt-faili nime.

Praegu kirjutage midagi ja väljastage see automaatselt loodud failile

T4-s on teie kirjutatu sisu põhimõtteliselt väljund sellisena, nagu see on. <# ... #> on T4 protsess ja ülejäänud on tegelik väljundtekst.

Näiteks paneme selle .tt-faili järgmiselt.

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

Salvestamisel peaks automaatselt loodud fail väljastama täpselt nii, nagu selle kirjutasite.

Väljund on kood, nii et muidugi võib seda kutsuda ka Program.cs.

Proovige koodi automaatselt genereerida

Nagu eespool mainitud, olen kinnitanud, et see, mida ma kirjutasin, on väljund sellisena, nagu see on, kuid see ei erine sellest, mida ma tavaliselt kirjutasin. Nüüd kasutame koodi automaatseks genereerimiseks tegelikult T4 skripti. Selle valmistamiseks on palju erinevaid viise, nii et palun andke siin vaid lühike selgitus ja seejärel tehke see ümber, nagu soovite seda teha.

Seekord loome näitena meetodi, mis lisab stringile iga tüübi sõelumismeetodi ja tagastab ParseXXXX määratud vaikeväärtuse, kui seda ei saa teisendada. See on vaid näide loomisest, nii et palun lisage see, kui tunnete, et on mõni osa, mis on puudu.

Kui saate C# -st aru ilma üksikasju selgitamata, on seda kiirem näha, nii et postitan kõigepealt täieliku koodi.

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

See, mida me teeme, on tüüpide List määratlemine esimest korda, mida tuleb luua , ja seejärel pöörates neid foreach ümber, et luua see arv meetodeid. T4 skriptiosa on kirjutatud C#, nii et kui saate aru C#, peaksite sellest aru saama.

Seda tehes genereeritakse järgmine kood:

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

Genereeritud on kood, nii et saate seda oma programmis kasutada sellisena, nagu see on.

Natuke rohkem T4 kohta

Kuigi T4 skripti osa saab kirjutada C#, on vaja eraldada T4 C# kood tegelikult genereeritud C# koodist. See osa, mis seda vahet teeb, on <# .... #> . <# .... #> on kood, mis täidetakse skriptina, mitte kood, mis tegelikult väljastatakse T4 skriptiosas.

<# .... #> C# enda sisu ei selgitata, sest need on sellised, nagu nad on, kuid <# .... #> raame on mitut tüüpi. Nende kasutamiseks on järgmised viisid.

Koodi selgitus
<#@ .... #> Seda kasutatakse peamiselt erinevate päiste deklareerimisel. Seda kasutatakse T4 koodi alguses deklaratsioonis assembly ja import .
<# .... #> Kirjutage kood, mida töötleb T4. Seda saab jagada mitmeks reaks. Kõik, mida selles vahemikus kirjeldatakse, toimib ainult operatsioonina ja ei mõjuta väljundteksti.
<#= .... #> Seda kasutatakse siis, kui soovite väljundtulemina väljastada väärtuse (nt muutuja). string text = "Sample"; Näiteks kui kirjutate muutuja <#= text #> nimega , väljastatakse Sample .
<#+ .... #> Kasutatakse klasside ja meetodite määratlemiseks. Põhimõtteliselt on see kirjutatud T4-faili lõpus.

T4 redaktori kohta

Kui teil pole Visual Studios laiendit, kuvatakse .tt-faili avamine mustvalge tekstina ilma värvita, mida on üsna raske näha.

Mõned neist võivad kuvada .tt-failide laienduse hõlpsasti loetaval viisil, nii et palun leidke see, mis teile meeldib. Kuna seda teevad vabatahtlikud, võib sisu muutuda sõltuvalt aastaajast ja Visual Studio versioonist. Laiendusi saab lisada Visual Studio menüüst laienduste alt.

Siin on see, mida nägin Visual Studio 2022-s laiendiga "T4 keel".