Naudokite "Visual Studio" ir teksto šablono transformacijos įrankių rinkinį (T4), kad automatiškai sugeneruotumėte kodą

Puslapis atnaujintas :
Puslapio sukūrimo data :

Darbo aplinka

Vizualinė studija
  • "Visual Studio 2022"
.GRYNOJI
  • .NET 8.0
Windows
  • Langai 11

Būtinosios sąlygos

Vizualinė studija
  • Jis veikia net ir su šiek tiek senesne versija
.GRYNOJI
  • Jis veikia net ir su šiek tiek senesne versija

Iš pradžių

Paprastai kurdami kodą manote, kad kodą sukursite įvesdami simbolius rankiniu būdu, tačiau jei norite sukurti kodą pagal kodą ar duomenis, kuriuos reikia sukurti pagal konkretų įstatymą, patogu jį automatiškai generuoti. Šiame skyriuje aprašoma, kaip naudoti teksto šablono transformacijos įrankių rinkinį (T4), kad kodas būtų generuojamas automatiškai.

Kadangi T4 yra scenarijų formatas, labai lengva sugeneruoti kodą "Visual Studio" iškart sukūrus T4 failą. Rašoma, kad jis automatiškai generuoja kodą, tačiau tai, kas generuojama, yra tik tekstas, todėl, be programų, galima generuoti bet ką teksto formatu, pvz., XML ir JSON.

Pagrindinis šio patarimo tikslas yra paaiškinti veiksmus, kaip iš tikrųjų automatiškai generuoti kodą T4, todėl nesigilinsiu į T4 detales. Jei kada nors parašėte programą C#, iškart ją suprasite. Jei norite sužinoti daugiau apie T4, patikrinkite oficialią svetainę ir kitas svetaines.

Prielaida

Šiame patarime daroma prielaida, kad:

  • "Visual Studio" įdiegta sistemoje "Windows".
  • C# supratimas

T4 gali būti naudojamas daugelyje projektų, išskyrus kelis, todėl diegimo metu iš esmės galite laisvai pasirinkti savo darbo krūvį.

Projekto kūrimas

Kaip minėta anksčiau, T4 gali būti naudojamas daugelyje projektų, išskyrus kelis, todėl nesvarbu, kokio tipo projektą kuriate. Šiuo atveju kuriame projektą konsolės programai.

T4 failo (.tt) kūrimas

Dešiniuoju pelės mygtuku spustelėkite projekto failą arba aplanką, kad įtrauktumėte naują elementą.

Spustelėkite mygtuką Peržiūrėti visus šablonus.

Kairėje esančiame medyje pasirinkite "Bendra", o viduryje esančiame sąraše - "Teksto šablonai". Failo pavadinimas yra savavališkas.

Iškart sukūrę failą galite pamatyti dialogo langą, panašų į toliau pateiktą. Tai rodoma, kai T4 failas sugeneruojamas automatiškai. T4 failai automatiškai generuojami kiekvieną kartą, kai failas įrašomas arba peržiūrimas. Jei norite atlikti automatinį generavimo procesą tokį, koks jis yra, spustelėkite mygtuką "Gerai". Jei nenorite, kad dialogo langas būtų rodomas kiekvieną kartą, pažymėkite "Daugiau nerodyti šio pranešimo". Atkreipkite dėmesį, kad jei T4 faile aprašytas neteisėtas procesas, kaip nurodyta dialogo lange, jis bus atitinkamai vykdomas.

Pridėję failą galite matyti, kad .tt failas buvo įtrauktas į sprendimų naršyklę.

Failo turinys yra toks.

Jei išskleisite .tt failą "Solution Explorer", pamatysite tekstinį failą tuo pačiu pavadinimu. Tai bus automatiškai sugeneruotas failas. Kadangi dar nieko neparašėme, failo turinys tuščias.

Automatiškai sugeneruoto failo nustatymas .cs failu

Jei naudojate T4, greičiausiai norėsite naudoti .cs plėtinį, o ne numatytąjį .txt, nes jūsų programos kodas bus sugeneruotas automatiškai. Tokiu atveju atidarykite .tt failą ir output extension .cs išsaugokite jį naudodami .

Automatiškai sugeneruotas failas dabar turėtų turėti .cs plėtinį. Pats failo vardas yra toks pat kaip .tt failo, todėl, jei norite jį pakeisti, pakeiskite .tt failo vardą.

Kol kas ką nors parašykite ir išveskite į automatiškai sugeneruotą failą

T4 sistemoje to, ką rašote, turinys iš esmės yra išvestis tokia, kokia yra. <# ... #> yra T4 procesas, o likusi dalis yra tikrasis išvesties tekstas.

Pavyzdžiui, įdėkime jį į .tt failą taip.

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

Kai jį įrašote, automatiškai sugeneruotas failas turėtų būti išvestas tiksliai taip, kaip jį parašėte.

Išvestis yra kodas, todėl, žinoma, ją taip pat galima iškviesti iš Program.cs.

Pabandykite sugeneruoti kodą automatiškai

Kaip minėta aukščiau, patvirtinau, kad tai, ką parašiau, bus išvesta tokia, kokia yra, tačiau tai niekuo nesiskiria nuo to, ką rašiau įprastai. Dabar iš tikrųjų naudokime T4 scenarijų, kad automatiškai sugeneruotume kodą. Yra daugybė būdų, kaip tai padaryti, todėl čia pateikite tik trumpą paaiškinimą, o tada perdarykite taip, kaip norite.

Šį kartą, kaip pavyzdį, sukurkime metodą, kuris prideda kiekvieno tipo analizės metodą prie eilutės ir grąžina ParseXXXX nurodytą numatytąją reikšmę, jei jos negalima konvertuoti. Tai tik kūrybos pavyzdys, todėl pridėkite jį, jei manote, kad trūksta dalių.

Jei galite suprasti C# nepaaiškindami detalių, greičiau jį pamatysite, todėl pirmiausia paskelbsiu visą kodą.

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

Tai, ką mes darome, yra apibrėžti tipus List , kuriuos pirmą kartą reikia sukurti , ir tada juos foreach apversti, kad sugeneruotume tą metodų skaičių. T4 scenarijaus dalis parašyta C#, taigi, jei suprantate C#, turėtumėte sugebėti ją suprasti.

Kai tai padarysite, sugeneruojamas šis kodas:

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

Tai, kas sugeneruota, yra kodas, todėl galite jį naudoti savo programoje tokį, koks yra.

Šiek tiek daugiau apie T4

Nors T4 scenarijaus dalis gali būti parašyta C#, būtina atskirti T4 C# kodą nuo iš tikrųjų sugeneruoto C# kodo. Dalis, kuri daro šį skirtumą, yra <# .... #> . <# .... #> yra kodas, kuris vykdomas kaip scenarijus, o ne kodas, kuris iš tikrųjų yra išvestis T4 scenarijaus dalyje.

<# .... #> Pats C# turinys nėra paaiškintas, nes jie yra tokie, kokie yra, tačiau <# .... #> yra keletas rėmelių tipų. Yra šie būdai, kaip naudoti kiekvieną.

Kodo paaiškinimas
<#@ .... #> Jis daugiausia naudojamas deklaruojant įvairias antraštes. Jis naudojamas T4 kodo assembly pradžioje deklaracijoje ir import .
<# .... #> Parašykite kodą, kurį apdoroja T4. Jis gali būti suskirstytas į kelias eilutes. Viskas, kas aprašyta šiame diapazone, veikia tik kaip operacija ir neturi įtakos išvesties tekstui.
<#= .... #> Tai naudojama, kai norite išvesti reikšmę, pvz., kintamąjį, kaip išvesties rezultatą. string text = "Sample"; Pavyzdžiui, jei rašote kintamąjį <#= text #> , vadinamą , bus Sample išvestis.
<#+ .... #> Naudojamas klasėms ir metodams apibrėžti. Iš esmės jis parašytas T4 failo pabaigoje.

Apie T4 redaktorių

Jei "Visual Studio" neturite plėtinio, .tt failo atidarymas bus rodomas nespalvotu tekstu be spalvos, o tai gana sunku pamatyti.

Kai kurie iš jų gali rodyti .tt failų plėtinį lengvai skaitomu būdu, todėl raskite jums patinkantį. Kadangi jį sukūrė savanoriai, turinys gali keistis priklausomai nuo metų laiko ir "Visual Studio" versijos. Plėtinius galima pridėti iš "Visual Studio" meniu skiltyje Plėtiniai.

Štai ką mačiau "Visual Studio 2022" su plėtiniu pavadinimu "T4 kalba".