Izmantojiet Visual Studio un teksta veidnes transformācijas rīkkopu (T4), lai automātiski ģenerētu kodu

Lapa atjaunota :
Lapas izveides datums :

Darbības vide

Visual Studio
  • Visual Studio 2022
.NETO
  • .NET 8.0
Windows
  • Operētājsistēmā Windows 11

Priekšnoteikumi

Visual Studio
  • Tas darbojas pat ar nedaudz vecāku versiju
.NETO
  • Tas darbojas pat ar nedaudz vecāku versiju

Sākumā

Parasti, veidojot kodu, jūs domājat, ka jūs izveidosit kodu, ierakstot rakstzīmes manuāli, bet, ja vēlaties izveidot kodu, pamatojoties uz kodu vai datiem, kas jāizveido ar konkrētu likumu, ir ērti to automātiski ģenerēt. Šajā sadaļā aprakstīts, kā izmantot teksta veidnes transformācijas rīkkopu (T4), lai automātiski ģenerētu kodu.

Tā kā T4 ir skriptu formāts, ir ļoti viegli ģenerēt kodu Visual Studio tūlīt pēc T4 faila izveidošanas. Ir rakstīts, ka tas automātiski ģenerē kodu, bet tas, kas tiek ģenerēts, ir tikai teksts, tāpēc papildus programmām ir iespējams ģenerēt jebko teksta formātā, piemēram, XML un JSON.

Šī padoma galvenais mērķis ir izskaidrot darbības, lai faktiski automātiski ģenerētu kodu T4, tāpēc es padziļināti neiedziļināšos T4 detaļās. Ja kādreiz esat uzrakstījis programmu C#, jūs to sapratīsit uzreiz. Ja vēlaties uzzināt vairāk par T4, lūdzu, pārbaudiet oficiālo vietni un citas vietnes.

Priekšnosacījumu

Šis padoms pieņem:

  • Operētājsistēmā Windows instalēta programma Visual Studio
  • Izpratne par C#

T4 var izmantot lielākajā daļā projektu, izņemot dažus, tāpēc instalēšanas laikā jūs būtībā varat brīvi izvēlēties savu darba slodzi.

Izveidojiet projektu

Kā minēts iepriekš, T4 var izmantot lielākajā daļā projektu, izņemot dažus, tāpēc nav svarīgi, kāda veida projektu jūs izveidojat. Šajā gadījumā mēs veidojam projektu konsoles lietotnei.

T4 faila (.tt) izveide

Ar peles labo pogu noklikšķiniet uz projekta faila vai mapes, lai pievienotu jaunu vienumu.

Noklikšķiniet uz pogas Skatīt visas veidnes.

Kreisajā pusē esošajā kokā atlasiet "Vispārīgi" un vidū esošajā sarakstā "Teksta veidnes". Faila nosaukums ir patvaļīgs.

Tūlīt pēc faila izveidošanas var tikt parādīts dialoglodziņš, kas līdzīgs zemāk redzamajam. Tas tiek parādīts, kad T4 fails tiek ģenerēts automātiski. T4 faili tiek automātiski ģenerēti katru reizi, kad fails tiek saglabāts vai skatīts. Ja vēlaties veikt automātiskās ģenerēšanas procesu, kā tas ir, noklikšķiniet uz pogas "Labi". Ja nevēlaties, lai dialogs tiktu rādīts katru reizi, atzīmējiet "Nerādīt šo ziņojumu vēlreiz". Lūdzu, ņemiet vērā, ka, ja T4 failā ir aprakstīts nelikumīgs process, kā norādīts dialoglodziņā, tas tiks attiecīgi izpildīts.

Pēc faila pievienošanas redzēsit, ka .tt fails ir pievienots risinājumu pārlūkam.

Lietas saturs ir šāds.

Ja izvilksit .tt failu risinājumu pārlūkā, redzēsit teksta failu ar tādu pašu nosaukumu. Tas būs automātiski ģenerēts fails. Tā kā mēs vēl neko neesam uzrakstījuši, faila saturs ir tukšs.

Automātiski ģenerēta faila izveide par .cs failu

Ja izmantojat T4, visticamāk, noklusējuma .txt vietā vēlēsities izmantot paplašinājumu .cs, jo programmas kods tiks ģenerēts automātiski. Tādā gadījumā atveriet .tt failu un output extension .cs saglabājiet to ar .

Automātiski ģenerētajam failam tagad ir jābūt .cs paplašinājumam. Faila nosaukums ir tāds pats kā .tt failam, tādēļ, ja vēlaties to mainīt, mainiet .tt faila nosaukumu.

Pagaidām kaut ko uzrakstiet un izvadiet to automātiski ģenerētā failā

T4 jūsu rakstītā saturs būtībā tiek izvadīts tāds, kāds tas ir. <# ... #> ir T4 process, un pārējais ir faktiskais izvades teksts.

Piemēram, ievietosim to .tt failā šādi.

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

Saglabājot to, automātiski ģenerētajam failam vajadzētu izvadīt tieši tā, kā to rakstījāt.

Izeja ir kods, tāpēc, protams, to var saukt arī no Program.cs.

Mēģiniet automātiski ģenerēt kodu

Kā minēts iepriekš, esmu apstiprinājis, ka tas, ko es uzrakstīju, tiks izvadīts tāds, kāds tas ir, bet tas neatšķiras no tā, ko es rakstīju normāli. Tagad faktiski izmantosim T4 skriptu, lai automātiski ģenerētu kodu. Ir daudz dažādu veidu, kā to izdarīt, tāpēc, lūdzu, šeit sniedziet tikai īsu skaidrojumu un pēc tam pārtaisiet to, kā vēlaties to izdarīt.

Šoreiz kā piemēru izveidosim metodi, kas virknei pievieno katra tipa parsēšanas metodi un atgriež ParseXXXX norādīto noklusējuma vērtību, ja to nevar konvertēt. Šis ir tikai radīšanas piemērs, tāpēc, lūdzu, pievienojiet to, ja jūtat, ka ir kādas daļas, kuru trūkst.

Ja jūs varat saprast C#, nepaskaidrojot detaļas, tas būs ātrāk to redzēt, tāpēc es vispirms ievietošu pilnu kodu.

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

Tas, ko mēs darām, ir definēt veidus List , kas pirmo reizi jāizveido ar , un pēc tam tos foreach apgriezt, lai ģenerētu šo metožu skaitu. T4 skripta daļa ir rakstīta C#, tāpēc, ja jūs saprotat C#, jums vajadzētu spēt to saprast.

To darot, tiek ģenerēts šāds kods:

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

Tas, kas tiek ģenerēts, ir kods, tāpēc jūs varat to izmantot savā programmā, kā tas ir.

Nedaudz vairāk par T4

Lai gan T4 skripta daļu var rakstīt C#, ir nepieciešams atdalīt T4 C# kodu no faktiski ģenerētā C# koda. Daļa, kas padara šo atšķirību, ir <# .... #> . <# .... #> ir kods, kas tiek izpildīts kā skripts, nevis kods, kas faktiski tiek izvadīts T4 skripta daļā.

<# .... #> Pats C# saturs nav izskaidrots, jo tie ir tādi, kādi tie ir, bet <# .... #> ir vairāki rāmju veidi. Ir šādi veidi, kā izmantot katru.

Koda skaidrojums
<#@ .... #> To galvenokārt izmanto dažādu galveņu deklarēšanā. To izmanto T4 koda assembly sākumā deklarācijā un import .
<# .... #> Uzrakstiet kodu, ko apstrādā T4. To var iedalīt vairākās rindās. Viss, kas aprakstīts šajā diapazonā, darbojas tikai kā operācija un neietekmē izvades tekstu.
<#= .... #> Tas tiek izmantots, ja vēlaties izvadīt vērtību, piemēram, mainīgo, kā izvades rezultātu. string text = "Sample"; Piemēram, ja rakstāt mainīgo <#= text #> , ko sauc par , tiks Sample izvadīts.
<#+ .... #> Izmanto, lai definētu klases un metodes. Būtībā tas ir rakstīts T4 faila beigās.

Par T4 redaktoru

Ja programmā Visual Studio nav paplašinājuma, .tt faila atvēršana tiks parādīta melnbaltā tekstā bez krāsas, kas ir diezgan grūti saskatāms.

Daži no tiem var parādīt .tt failu paplašinājumu viegli lasāmā veidā, tāpēc, lūdzu, atrodiet sev tīkamāko. Tā kā to veic brīvprātīgie, saturs var mainīties atkarībā no gada laika un Visual Studio versijas. Paplašinājumus var pievienot no Visual Studio izvēlnes sadaļā Paplašinājumi.

Lūk, ko es redzēju Visual Studio 2022 ar paplašinājumu ar nosaukumu "T4 valoda".