Otomatik olarak kod oluşturmak için Visual Studio'yu ve Metin Şablonu Dönüştürme Araç Seti'ni (T4) kullanın

Sayfa güncel :
Sayfa oluşturma tarihi :

Çalışma ortamı

Görsel Stüdyo
  • Görsel Studio 2022
.NET
  • .NET 8.0
Windows
  • pencereler 11

Önkoşullar

Görsel Stüdyo
  • Biraz daha eski bir sürümle bile çalışır
.NET
  • Biraz daha eski bir sürümle bile çalışır

İlk başta

Normalde bir kod oluştururken, karakterleri manuel olarak yazarak bir kod oluşturacağınızı düşünürsünüz, ancak belirli bir yasa tarafından oluşturulması gereken kod veya verilere dayalı bir kod oluşturmak istiyorsanız, bunu otomatik olarak oluşturabilmek uygundur. Bu bölümde, otomatik olarak kod oluşturmak için Metin Şablonu Dönüştürme Araç Seti'nin (T4) nasıl kullanılacağı açıklanmaktadır.

T4 bir betik formatı olduğundan, bir T4 dosyası oluşturduktan hemen sonra Visual Studio'da kod oluşturmak çok kolaydır. Otomatik olarak kod ürettiği yazılmıştır, ancak oluşturulan şey sadece metindir, bu nedenle programlara ek olarak XML ve JSON gibi metin biçiminde herhangi bir şey oluşturmak mümkündür.

Bu ipucunun temel amacı, T4'te otomatik olarak kod oluşturma adımlarını açıklamaktır, bu yüzden T4'ün ayrıntılarına derinlemesine girmeyeceğim. Daha önce C# ile bir program yazdıysanız, hemen anlayacaksınız. T4 hakkında daha fazla bilgi edinmek istiyorsanız, lütfen resmi web sitesini ve diğer siteleri kontrol edin.

önkoşul

Bu ipucu aşağıdakileri varsayar:

  • Windows'ta yüklü Visual Studio
  • C# dilini anlama

T4, birkaçı dışında çoğu projede kullanılabilir, bu nedenle kurulum sırasında iş yükünüzü seçmekte temel olarak özgürsünüz.

Proje oluşturma

Daha önce de belirtildiği gibi, T4, birkaçı dışında çoğu projede kullanılabilir, bu nedenle ne tür bir proje oluşturduğunuz önemli değildir. Bu durumda, bir konsol uygulaması için bir proje oluşturuyoruz.

T4 dosyası (.tt) oluşturma

Yeni bir öğe eklemek için bir proje dosyasına veya klasörüne sağ tıklayın.

Tüm Şablonları Görüntüle düğmesini tıklayın.

Soldaki ağaçtan "Genel"i ve ortadaki listeden "Metin Şablonları"nı seçin. Dosya adı isteğe bağlıdır.

Dosyayı oluşturduktan hemen sonra, aşağıdakine benzer bir iletişim kutusu görebilirsiniz. Bu, T4 dosyası otomatik olarak oluşturulduğunda görüntülenir. T4 dosyaları, dosya her kaydedildiğinde veya görüntülendiğinde otomatik olarak oluşturulur. Otomatik oluşturma işlemini olduğu gibi gerçekleştirmek istiyorsanız "Tamam" butonuna tıklayın. İletişim kutusunun her seferinde görünmesini istemiyorsanız "Bu mesajı bir daha gösterme" seçeneğini işaretleyin. İletişim kutusunda belirtildiği gibi T4 dosyasında yasa dışı bir işlem açıklanırsa, buna göre yürütüleceğini lütfen unutmayın.

Dosyayı ekledikten sonra, .tt dosyasının Çözüm Gezgini'ne eklendiğini görebilirsiniz.

Dosyanın içeriği aşağıdaki gibidir.

.tt dosyasını Çözüm Gezgini'nde ayıklarsanız, aynı ada sahip bir metin dosyası görürsünüz. Bu, otomatik olarak oluşturulan dosya olacaktır. Henüz bir şey yazmadığımız için dosyanın içeriği boş.

Otomatik olarak oluşturulan bir dosyayı .cs dosyası yapma

T4 kullanıyorsanız, programınızın kodu otomatik olarak oluşturulacağından, büyük olasılıkla varsayılan .txt yerine .cs uzantısını kullanmak isteyeceksiniz. Bu durumda, .tt dosyasını açın ve output extension .cs ile kaydedin.

Otomatik olarak oluşturulan dosya artık bir .cs uzantısına sahip olmalıdır. Dosya adının kendisi .tt dosyasıyla aynıdır, bu nedenle değiştirmek isterseniz .tt dosyasının adını değiştirin.

Şimdilik, bir şeyler yazın ve otomatik olarak oluşturulan bir dosyaya çıktı verin

T4'te yazdıklarınızın içeriği temel olarak olduğu gibi çıktı alınır. <# ... #> T4 işlemidir ve geri kalanı gerçek çıktı metnidir.

Örneğin aşağıdaki gibi bir .tt dosyasına koyalım.

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

Kaydettiğinizde, otomatik olarak oluşturulan dosya tam olarak yazdığınız gibi çıktı almalıdır.

Çıktı koddur, bu nedenle elbette Program.cs de çağrılabilir.

Kodu otomatik olarak oluşturmayı deneyin

Yukarıda da belirttiğim gibi yazdıklarımın olduğu gibi çıktı alacağını onayladım ancak bunun normalde yazdıklarımdan hiçbir farkı yok. Şimdi, kodu otomatik olarak oluşturmak için aslında T4 komut dosyasını kullanalım. Bunu yapmanın çok çeşitli yolları vardır, bu yüzden lütfen burada sadece kısa bir açıklama yapın ve ardından istediğiniz gibi yeniden yapın.

Bu sefer örnek olarak, her türden bir parse metodunu string'e ekleyen ve eğer dönüştürülemiyorsa belirtilen varsayılan değeri döndüren ParseXXXX bir metot oluşturalım. Bu sadece bir yaratılış örneğidir, bu yüzden eksik olan herhangi bir parça olduğunu düşünüyorsanız lütfen ekleyin.

Detayları açıklamadan C# anlayabiliyorsanız, görmeniz daha hızlı olacak, bu yüzden önce tam kodu göndereceğim.

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

Yaptığımız şey, ile oluşturulacak türleri List ilk kez tanımlamak ve ardından bu sayıda yöntem oluşturmak için bunları foreach tersine çevirmektir. T4'ün betik kısmı C# ile yazılmıştır, bu nedenle C# anlıyorsanız, anlayabilmeniz gerekir.

Bunu yaptığınızda, aşağıdaki kod oluşturulur:

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

Oluşturulan şey koddur, bu nedenle onu programınızda olduğu gibi kullanabilirsiniz.

T4 hakkında biraz daha fazla bilgi

T4 betik kısmı C# ile yazılabilse de, T4 C# kodunu gerçekte oluşturulan C# kodundan ayırmak gerekir. Bu ayrımı yapan kısım ise <# .... #> . <# .... #> T4'ün komut dosyası bölümünde gerçekten çıktısı alınan kod değil, bir komut dosyası olarak yürütülen koddur.

<# .... #> C#'ın içeriği, oldukları gibi oldukları için açıklanmaz, ancak <# .... #> birkaç tür çerçeve vardır. Her birini kullanmanın aşağıdaki yolları vardır.

Kod Açıklaması
<#@ .... #> Esas olarak çeşitli başlıkların bildiriminde kullanılır. ve import bildiriminde assembly T4 kodunun başında kullanılır.
<# .... #> T4 tarafından işlenen kodu yazın. Birden fazla satıra bölünebilir. Bu aralıkta açıklanan herhangi bir şey yalnızca bir işlem olarak işlev görür ve çıktı metnini etkilemez.
<#= .... #> Bu, çıktı sonucu olarak değişken gibi bir değerin çıktısını almak istediğinizde kullanılır. string text = "Sample"; Örneğin, adında bir değişken <#= text #> yazarsanız, çıktı alınacaktır Sample .
<#+ .... #> Sınıfları ve yöntemleri tanımlamak için kullanılır. Temel olarak, T4 dosyasının sonuna yazılır.

T4 Editörü Hakkında

Visual Studio'da bir uzantınız yoksa, bir .tt dosyasını açmak, renksiz siyah beyaz metin olarak görüntülenecektir, bu da görülmesi oldukça zordur.

Bazıları .tt dosyaları için okunması kolay bir uzantı görüntüleyebilir, bu nedenle lütfen beğendiğinizi bulun. Gönüllüler tarafından yapıldığından, içerik yılın zamanına ve Visual Studio'nun sürümüne bağlı olarak değişebilir. Uzantılar, Uzantılar altındaki Visual Studio menüsünden eklenebilir.

İşte Visual Studio 2022'de "T4 Language" adlı bir uzantı ile gördüklerim.