Gunakan Visual Studio dan Toolkit Transformasi Templat Teks (T4) untuk menghasilkan kode secara otomatis

Halaman Diperbarui :
Tanggal pembuatan halaman :

Lingkungan operasi

Visual Studio
  • Visual Studio 2022
.JARING
  • .NET 8.0
Windows
  • Jendela 11

Prasyarat

Visual Studio
  • Ini bekerja bahkan dengan versi yang agak lama
.JARING
  • Ini bekerja bahkan dengan versi yang agak lama

Pada awalnya

Biasanya, saat membuat kode, Anda berpikir bahwa Anda akan membuat kode dengan mengetik karakter secara manual, tetapi jika Anda ingin membuat kode berdasarkan kode atau data yang perlu dibuat oleh hukum tertentu, akan lebih mudah untuk dapat membuatnya secara otomatis. Bagian ini menjelaskan cara menggunakan Toolkit Transformasi Templat Teks (T4) untuk menghasilkan kode secara otomatis.

Karena T4 adalah format scripting, sangat mudah untuk menghasilkan kode di Visual Studio segera setelah membuat file T4. Tertulis bahwa itu secara otomatis menghasilkan kode, tetapi yang dihasilkan hanyalah teks, sehingga dimungkinkan untuk menghasilkan apa pun dalam format teks seperti XML dan JSON selain program.

Tujuan utama dari tip ini adalah untuk menjelaskan langkah-langkah untuk benar-benar menghasilkan kode secara otomatis di T4, jadi saya tidak akan membahas detail T4 secara mendalam. Jika Anda pernah menulis program dalam C#, Anda akan langsung memahaminya. Jika Anda ingin tahu lebih banyak tentang T4, silakan periksa situs web resmi dan situs lainnya.

Prasyarat

Kiat ini mengasumsikan hal berikut:

  • Visual Studio diinstal di Windows
  • Pengertian C#

T4 dapat digunakan di sebagian besar proyek, dengan pengecualian beberapa, jadi pada dasarnya Anda bebas memilih beban kerja Anda selama instalasi.

Membuat proyek

Seperti disebutkan sebelumnya, T4 dapat digunakan di sebagian besar proyek, kecuali beberapa, jadi tidak masalah jenis proyek apa yang Anda buat. Dalam hal ini, kita membuat proyek untuk aplikasi konsol.

Buat file T4 (.tt)

Klik kanan file atau folder proyek untuk menambahkan item baru.

Klik tombol Lihat Semua Template.

Pilih "Umum" dari pohon di sebelah kiri, dan "Template Teks" dari daftar di tengah. Nama file sewenang-wenang.

Segera setelah membuat file, Anda mungkin melihat dialog yang mirip dengan yang ada di bawah ini. Ini ditampilkan ketika file T4 dibuat secara otomatis. T4 files dibuat secara otomatis setiap kali file disimpan atau dilihat. Jika Anda ingin melakukan proses pembuatan otomatis apa adanya, klik tombol "OK". Jika Anda tidak ingin dialog muncul setiap saat, centang "Jangan tampilkan pesan ini lagi". Harap dicatat bahwa jika proses ilegal dijelaskan dalam file T4 seperti yang dinyatakan dalam dialog, itu akan dieksekusi sesuai dengan itu.

Setelah Anda menambahkan file, Anda dapat melihat bahwa file .tt telah ditambahkan ke Solution Explorer.

Isi file adalah sebagai berikut.

Jika Anda mengekstrak file .tt di Solution Explorer, Anda akan melihat file teks dengan nama yang sama. Ini akan menjadi file yang dibuat secara otomatis. Karena kita belum menulis apa-apa, isi file kosong.

Jadikan file yang dibuat secara otomatis sebagai file .cs

Jika Anda menggunakan T4, kemungkinan besar Anda ingin menggunakan ekstensi .cs alih-alih .txt default, karena kode untuk program Anda akan dibuat secara otomatis. Dalam hal ini, buka file .tt dan output extension .cs simpan dengan .

File yang dibuat secara otomatis sekarang harus memiliki ekstensi .cs. Nama file itu sendiri sama dengan file .tt, jadi jika Anda ingin mengubahnya, ubah nama file .tt.

Untuk saat ini, tulis sesuatu dan keluarkan ke file yang dibuat secara otomatis

Di T4, isi dari apa yang Anda tulis pada dasarnya adalah output apa adanya. <# ... #> adalah proses T4, dan sisanya adalah teks keluaran yang sebenarnya.

Misalnya, mari kita masukkan ke dalam file .tt sebagai berikut.

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

Saat Anda menyimpannya, file yang dibuat secara otomatis akan dikeluarkan persis seperti yang Anda tulis.

Outputnya adalah kode, jadi tentu saja bisa juga dipanggil dari Program.cs.

Coba buat kode secara otomatis

Seperti disebutkan di atas, saya telah mengkonfirmasi bahwa apa yang saya tulis akan keluar apa adanya, tetapi ini tidak berbeda dengan apa yang saya tulis secara normal. Sekarang, mari kita benar-benar menggunakan skrip T4 untuk menghasilkan kode secara otomatis. Ada berbagai macam cara untuk membuatnya, jadi tolong berikan penjelasan singkat saja di sini, lalu buat ulang sesuai keinginan Anda.

Kali ini, sebagai contoh, mari kita buat metode yang menambahkan metode penguraian dari setiap jenis ke string dan mengembalikan ParseXXXX nilai default yang ditentukan jika tidak dapat dikonversi. Ini hanya contoh penciptaan, jadi silakan tambahkan jika Anda merasa ada bagian yang kurang.

Jika Anda dapat memahami C# tanpa menjelaskan detailnya, akan lebih cepat untuk melihatnya, jadi saya akan memposting kode lengkapnya terlebih dahulu.

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

Apa yang kami lakukan adalah mendefinisikan tipe List untuk pertama kalinya untuk dibuat dengan , dan kemudian membalikkannya foreach untuk menghasilkan jumlah metode tersebut. Bagian skrip T4 ditulis dalam C#, jadi jika Anda memahami C#, Anda harus dapat memahaminya.

Saat Anda melakukan ini, kode berikut akan dihasilkan:

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

Yang dihasilkan adalah kode, sehingga Anda dapat menggunakannya dalam program Anda apa adanya.

Sedikit lebih banyak tentang T4

Meskipun bagian skrip T4 dapat ditulis dalam C#, kode C# T4 perlu dipisahkan dari kode C# yang benar-benar dihasilkan. Bagian yang membuat perbedaan itu adalah <# .... #> . <# .... #> adalah kode yang dieksekusi sebagai skrip, bukan kode yang sebenarnya dikeluarkan di bagian skrip T4.

<# .... #> Isi C# sendiri tidak dijelaskan karena apa adanya, tetapi <# .... #> ada beberapa jenis bingkai. Ada cara berikut untuk menggunakan masing-masing.

Penjelasan Kode
<#@ .... #> Ini terutama digunakan dalam deklarasi berbagai header. Ini digunakan di awal kode T4 dalam assembly deklarasi dan .import
<# .... #> Tulis kode yang diproses oleh T4. Itu dapat dibagi menjadi beberapa baris. Apa pun yang dijelaskan dalam rentang ini hanya bertindak sebagai operasi dan tidak memengaruhi teks output.
<#= .... #> Ini digunakan ketika Anda ingin mengeluarkan nilai seperti variabel sebagai hasil output. string text = "Sample"; Misalnya, jika Anda menulis variabel <#= text #> yang disebut , akan dikeluarkan Sample .
<#+ .... #> Digunakan untuk menentukan kelas dan metode. Pada dasarnya, itu ditulis di akhir file T4.

Tentang Editor T4

Jika Anda tidak memiliki ekstensi di Visual Studio, membuka file .tt akan ditampilkan dalam teks hitam putih tanpa warna, yang agak sulit dilihat.

Beberapa dari mereka mungkin menampilkan ekstensi untuk file .tt dengan cara yang mudah dibaca, jadi silakan temukan yang Anda suka. Karena dibuat oleh sukarelawan, konten dapat berubah tergantung pada waktu dalam setahun dan versi Visual Studio. Ekstensi dapat ditambahkan dari menu Visual Studio di bawah Ekstensi.

Inilah yang saya lihat di Visual Studio 2022 dengan ekstensi yang disebut "Bahasa T4".