Χρησιμοποιήστε το Visual Studio και το Κιτ εργαλείων μετασχηματισμού προτύπου κειμένου (T4) για αυτόματη δημιουργία κώδικα

Σελίδα ενημέρωση :
Ημερομηνία δημιουργίας σελίδας :

Περιβάλλον λειτουργίας

Οπτικό στούντιο
  • Visual Studio 2022
.ΔΊΧΤΥ
  • .NET 8.0
παράθυρα
  • Παράθυρα 11

Προϋποθέσεις

Οπτικό στούντιο
  • Λειτουργεί ακόμη και με μια κάπως παλαιότερη έκδοση
.ΔΊΧΤΥ
  • Λειτουργεί ακόμη και με μια κάπως παλαιότερη έκδοση

Αρχικά

Κανονικά, όταν δημιουργείτε έναν κώδικα, νομίζετε ότι θα δημιουργήσετε έναν κώδικα πληκτρολογώντας χαρακτήρες με μη αυτόματο τρόπο, αλλά αν θέλετε να δημιουργήσετε έναν κώδικα βασισμένο σε κώδικα ή δεδομένα που πρέπει να δημιουργηθούν από έναν συγκεκριμένο νόμο, είναι βολικό να μπορείτε να τον δημιουργήσετε αυτόματα. Αυτή η ενότητα περιγράφει τον τρόπο χρήσης του Κιτ εργαλείων μετασχηματισμού προτύπων κειμένου (T4) για την αυτόματη δημιουργία κώδικα.

Δεδομένου ότι το T4 είναι μια μορφή δέσμης ενεργειών, είναι πολύ εύκολο να δημιουργήσετε κώδικα στο Visual Studio αμέσως μετά τη δημιουργία ενός αρχείου T4. Είναι γραμμένο ότι δημιουργεί αυτόματα κώδικα, αλλά αυτό που δημιουργείται είναι μόνο κείμενο, οπότε είναι δυνατό να δημιουργηθεί οτιδήποτε σε μορφή κειμένου όπως XML και JSON εκτός από προγράμματα.

Ο κύριος σκοπός αυτής της συμβουλής είναι να εξηγήσει τα βήματα για την αυτόματη δημιουργία κώδικα στο T4, οπότε δεν θα μπω σε βάθος στις λεπτομέρειες του T4. Εάν έχετε γράψει ποτέ ένα πρόγραμμα σε C#, θα το καταλάβετε αμέσως. Αν θέλετε να μάθετε περισσότερα σχετικά με το T4, ελέγξτε τον επίσημο ιστότοπο και άλλους ιστότοπους.

Προϋπόθεση

Αυτή η συμβουλή προϋποθέτει τα εξής:

  • Visual Studio εγκατεστημένο στα Windows
  • Κατανόηση της C#

Το T4 μπορεί να χρησιμοποιηθεί στα περισσότερα έργα, με εξαίρεση μερικά, οπότε είστε βασικά ελεύθεροι να επιλέξετε το φόρτο εργασίας σας κατά την εγκατάσταση.

Δημιουργία έργου

Όπως αναφέρθηκε προηγουμένως, το T4 μπορεί να χρησιμοποιηθεί στα περισσότερα έργα, με εξαίρεση μερικά, οπότε δεν έχει σημασία τι είδους έργο δημιουργείτε. Σε αυτήν την περίπτωση, δημιουργούμε ένα έργο για μια εφαρμογή κονσόλας.

Δημιουργία αρχείου T4 (.tt)

Κάντε δεξί κλικ σε ένα αρχείο ή φάκελο έργου για να προσθέσετε ένα νέο στοιχείο.

Κάντε κλικ στο κουμπί Προβολή όλων των προτύπων.

Επιλέξτε "Γενικά" από το δέντρο στα αριστερά και "Πρότυπα κειμένου" από τη λίστα στη μέση. Το όνομα αρχείου είναι αυθαίρετο.

Αμέσως μετά τη δημιουργία του αρχείου, ενδέχεται να δείτε ένα παράθυρο διαλόγου παρόμοιο με το παρακάτω. Αυτό εμφανίζεται όταν δημιουργείται αυτόματα το αρχείο T4. Τα αρχεία T4 δημιουργούνται αυτόματα κάθε φορά που αποθηκεύεται ή προβάλλεται το αρχείο. Εάν θέλετε να εκτελέσετε τη διαδικασία αυτόματης δημιουργίας ως έχει, κάντε κλικ στο κουμπί "OK". Εάν δεν θέλετε να εμφανίζεται το παράθυρο διαλόγου κάθε φορά, επιλέξτε "Να μην εμφανιστεί ξανά αυτό το μήνυμα". Λάβετε υπόψη ότι εάν μια παράνομη διαδικασία περιγράφεται στο αρχείο T4 όπως αναφέρεται στο διάλογο, θα εκτελεστεί ανάλογα.

Αφού προσθέσετε το αρχείο, μπορείτε να δείτε ότι το αρχείο .tt έχει προστεθεί στην Εξερεύνηση λύσεων.

Τα περιεχόμενα του αρχείου έχουν ως εξής.

Εάν εξαγάγετε το αρχείο .tt στην Εξερεύνηση λύσεων, θα δείτε ένα αρχείο κειμένου με το ίδιο όνομα. Αυτό θα είναι το αρχείο που δημιουργείται αυτόματα. Δεδομένου ότι δεν έχουμε γράψει τίποτα ακόμα, τα περιεχόμενα του αρχείου είναι κενά.

Μετατροπή ενός αρχείου που δημιουργείται αυτόματα σε αρχείο .cs

Εάν χρησιμοποιείτε το T4, πιθανότατα θα θέλετε να χρησιμοποιήσετε την επέκταση .cs αντί για την προεπιλεγμένη .txt, καθώς ο κώδικας για το πρόγραμμά σας θα δημιουργηθεί αυτόματα. Σε αυτήν την περίπτωση, ανοίξτε το αρχείο .tt και output extension .cs αποθηκεύστε το με το .

Το αρχείο που δημιουργείται αυτόματα θα πρέπει τώρα να έχει επέκταση .cs. Το ίδιο το όνομα αρχείου είναι το ίδιο με το αρχείο .tt, επομένως, εάν θέλετε να το αλλάξετε, αλλάξτε το όνομα του αρχείου .tt.

Προς το παρόν, γράψτε κάτι και εξάγετέ το σε ένα αρχείο που δημιουργείται αυτόματα

Στο T4, τα περιεχόμενα αυτού που γράφετε είναι βασικά έξοδος όπως είναι. <# ... #> είναι η διαδικασία T4 και το υπόλοιπο είναι το πραγματικό κείμενο εξόδου.

Για παράδειγμα, ας το βάλουμε σε ένα αρχείο .tt ως εξής.

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

Όταν το αποθηκεύετε, το αρχείο που δημιουργείται αυτόματα θα πρέπει να εξέρχεται ακριβώς όπως το γράψατε.

Η έξοδος είναι κώδικας, οπότε φυσικά μπορεί επίσης να κληθεί από Program.cs.

Προσπαθήστε να δημιουργήσετε κώδικα αυτόματα

Όπως αναφέρθηκε παραπάνω, έχω επιβεβαιώσει ότι αυτό που έγραψα θα είναι αποτέλεσμα όπως είναι, αλλά αυτό δεν διαφέρει από αυτό που έγραψα κανονικά. Τώρα, ας χρησιμοποιήσουμε πραγματικά το σενάριο T4 για να δημιουργήσουμε αυτόματα τον κώδικα. Υπάρχει μια μεγάλη ποικιλία τρόπων για να το φτιάξετε, οπότε δώστε μόνο μια σύντομη εξήγηση εδώ και, στη συνέχεια, ξαναφτιάξτε το όπως θέλετε να το κάνετε.

Αυτή τη φορά, για παράδειγμα, ας δημιουργήσουμε μια μέθοδο που προσθέτει μια μέθοδο ανάλυσης κάθε τύπου στη συμβολοσειρά και επιστρέφει ParseXXXX την καθορισμένη προεπιλεγμένη τιμή εάν δεν μπορεί να μετατραπεί. Αυτό είναι μόνο ένα παράδειγμα δημιουργίας, οπότε προσθέστε το εάν αισθάνεστε ότι υπάρχουν μέρη που λείπουν.

Εάν μπορείτε να καταλάβετε το C # χωρίς να εξηγήσετε τις λεπτομέρειες, θα είναι πιο γρήγορο να το δείτε, γι 'αυτό θα δημοσιεύσω πρώτα τον πλήρη κώδικα.

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

Αυτό που κάνουμε είναι να ορίζουμε τους τύπους List για πρώτη φορά που θα δημιουργηθούν με , και στη συνέχεια να τους foreach γυρίζουμε για να δημιουργήσουμε αυτόν τον αριθμό μεθόδων. Το τμήμα σεναρίου του T4 είναι γραμμένο σε C#, οπότε αν καταλαβαίνετε το C#, θα πρέπει να είστε σε θέση να το καταλάβετε.

Όταν το κάνετε αυτό, δημιουργείται ο ακόλουθος κώδικας:

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

Αυτό που δημιουργείται είναι κώδικας, ώστε να μπορείτε να τον χρησιμοποιήσετε στο πρόγραμμά σας ως έχει.

Λίγα περισσότερα για το T4

Παρόλο που το τμήμα δέσμης ενεργειών T4 μπορεί να γραφτεί σε C#, είναι απαραίτητο να διαχωρίσετε τον κώδικα T4 C# από τον κώδικα C# που δημιουργείται στην πραγματικότητα. Το μέρος που κάνει αυτή τη διάκριση είναι <# .... #> . <# .... #> είναι ο κώδικας που εκτελείται ως δέσμη ενεργειών, όχι ο κώδικας που εξάγεται στην πραγματικότητα στο τμήμα δέσμης ενεργειών του T4.

<# .... #> Τα περιεχόμενα της ίδιας της C# δεν εξηγούνται επειδή είναι όπως είναι, αλλά <# .... #> υπάρχουν διάφοροι τύποι πλαισίων. Υπάρχουν οι παρακάτω τρόποι χρήσης του καθενός.

Επεξήγηση κώδικα
<#@ .... #> Χρησιμοποιείται κυρίως στη δήλωση διαφόρων κεφαλίδων. Χρησιμοποιείται στην αρχή του κωδικού Τ4 στη assembly δήλωση του και import .
<# .... #> Γράψτε κώδικα που υποβάλλεται σε επεξεργασία από το T4. Μπορεί να χωριστεί σε πολλές γραμμές. Οτιδήποτε περιγράφεται σε αυτό το εύρος λειτουργεί μόνο ως λειτουργία και δεν επηρεάζει το κείμενο εξόδου.
<#= .... #> Αυτό χρησιμοποιείται όταν θέλετε να εξάγετε μια τιμή, όπως μια μεταβλητή, ως αποτέλεσμα εξόδου. string text = "Sample"; Για παράδειγμα, εάν γράψετε μια μεταβλητή <#= text #> που ονομάζεται , θα είναι Sample έξοδος.
<#+ .... #> Χρησιμοποιείται για τον καθορισμό κλάσεων και μεθόδων. Βασικά, είναι γραμμένο στο τέλος του αρχείου T4.

Σχετικά με το T4 Editor

Εάν δεν έχετε επέκταση στο Visual Studio, το άνοιγμα ενός αρχείου .tt θα εμφανίζεται σε ασπρόμαυρο κείμενο χωρίς χρώμα, το οποίο είναι μάλλον δύσκολο να δείτε.

Ορισμένα από αυτά ενδέχεται να εμφανίζουν μια επέκταση για αρχεία .tt με ευανάγνωστο τρόπο, οπότε βρείτε αυτό που σας αρέσει. Δεδομένου ότι δημιουργείται από εθελοντές, το περιεχόμενο μπορεί να αλλάξει ανάλογα με την εποχή του χρόνου και την έκδοση του Visual Studio. Μπορείτε να προσθέσετε επεκτάσεις από το μενού Visual Studio στην περιοχή Επεκτάσεις.

Δείτε τι είδα στο Visual Studio 2022 με μια επέκταση που ονομάζεται "T4 Language".