Aracılığıyla paylaş


T4 Metin Şablonları Kullanarak Tasarım Zamanı Kodu Oluşturma

Tasarım zamanı T4 metin şablonları, Visual Studio projenizde program kodu ve diğer dosyalar oluşturmanıza olanak sağlar. Genellikle, bir modelden alınan verilere göre oluşturdukları kodu değiştirebilmeleri için şablonları yazarsınız. Model, uygulamanızın gereksinimleriyle ilgili önemli bilgileri içeren bir dosya veya veritabanıdır.

Örneğin, bir iş akışını tablo veya diyagram olarak tanımlayan bir modeliniz olabilir. Modelden, iş akışını yürüten yazılımı oluşturabilirsiniz. Kullanıcılarınızın gereksinimleri değiştiğinde, yeni iş akışını kullanıcılarla kolayca tartışabilirsiniz. Kodu iş akışından yeniden oluşturma, kodu el ile güncelleştirmekten daha güvenilirdir.

Not

Model, bir uygulamanın belirli bir yönünü açıklayan bir veri kaynağıdır. Herhangi bir biçimde, herhangi bir dosya veya veritabanında olabilir. UML modeli veya Etki Alanına Özgü Dil modeli gibi belirli bir biçimde olması gerekmez. Tipik modeller tablo veya XML dosyaları biçimindedir.

Kod oluşturmayı zaten biliyorsunuzdur. Visual Studio çözümünüzde bir .resx dosyasında kaynak tanımladığınızda, otomatik olarak bir sınıf ve yöntem kümesi oluşturulur. Resources dosyası, sınıfları ve yöntemleri düzenlemeniz gerekseydi kaynakları düzenlemeyi çok daha kolay ve daha güvenilir hale getirir. Metin şablonlarıyla, kendi tasarımınızın kaynağından aynı şekilde kod oluşturabilirsiniz.

Metin şablonu, oluşturmak istediğiniz metnin bir karışımını ve metnin değişken bölümlerini oluşturan program kodunu içerir. Program kodu, oluşturulan metnin bölümlerini yinelemenize veya koşullu olarak atlamanıza olanak tanır. Oluşturulan metin, uygulamanızın bir parçasını oluşturacak program kodu olabilir.

Tasarım Zamanı T4 Metin Şablonu Oluşturma

  1. Yeni bir Visual Studio projesi oluşturun veya var olan bir projeyi açın.

  2. Projenize bir metin şablonu dosyası ekleyin ve .tt uzantısına sahip bir ad verin.

    Bunu yapmak için, Çözüm Gezgini projenizin kısayol menüsünde Yeni Öğe Ekle'yi>seçin. Yeni Öğe Ekle iletişim kutusunda orta bölmeden Metin Şablonu'nu seçin.

    Dosyanın Özel Araç özelliğinin TextTemplatingFileGenerator olduğuna dikkat edin.

  3. dosyasını açın. Zaten aşağıdaki yönergeleri içerir:

    <#@ template hostspecific="false" language="C#" #>
    <#@ output extension=".txt" #>
    

    Şablonu bir Visual Basic projesine eklediyseniz, dil özniteliği "VB" olur.

  4. Dosyanın sonuna biraz metin ekleyin. Örneğin:

    Hello, world!
    
  5. Dosyayı kaydedin.

    Şablonu çalıştırmak istediğinizi onaylamanızı isteyen bir Güvenlik Uyarısı ileti kutusu görebilirsiniz. Tamam'a tıklayın.

  6. Çözüm Gezgini şablon dosyası düğümünü genişletirseniz uzantı .txt bir dosya bulursunuz. Dosya, şablondan oluşturulan metni içerir.

    Not

    Projeniz bir Visual Basic projesiyse, çıkış dosyasını görmek için Tüm Dosyaları Göster'e tıklamanız gerekir.

Kodu yeniden oluşturma

Aşağıdaki durumlardan herhangi birinde bir şablon yürütülür ve yan dosya oluşturulur:

  • Şablonu düzenleyin ve odağı farklı bir Visual Studio penceresine değiştirin.

  • Şablonu kaydedin.

  • Oluştur menüsünde Tüm Şablonları Dönüştür'e tıklayın. Bu, Visual Studio çözümündeki tüm şablonları dönüştürür.

  • Çözüm Gezgini herhangi bir dosyanın kısayol menüsünde Özel Aracı Çalıştır'ı seçin. Seçili şablon alt kümesini dönüştürmek için bu yöntemi kullanın.

Ayrıca, okudukları veri dosyaları değiştiğinde şablonların yürütülmesi için bir Visual Studio projesi de ayarlayabilirsiniz. Daha fazla bilgi için bkz . Kodu otomatik olarak yeniden oluşturma.

Değişken Metin Oluşturma

Metin şablonları, oluşturulan dosyanın içeriğini değiştirmek için program kodunu kullanmanıza olanak sağlar.

  1. Dosyanın içeriğini .tt değiştirin:

    <#@ template hostspecific="false" language="C#" #>
    <#@ output extension=".txt" #>
    <#int top = 10;
    
    for (int i = 0; i<=top; i++)
    { #>
       The square of <#= i #> is <#= i*i #>
    <# } #>
    
  2. .tt Dosyayı kaydedin ve oluşturulan .txt dosyasını yeniden inceleyin. 0 ile 10 sayıların karelerini listeler.

    deyimlerinin içinde ve içindeki tek ifadelerin içine <#...#><#=...#>eklendiğine dikkat edin. Daha fazla bilgi için bkz . T4 Metin Şablonu Yazma.

    Oluşturma kodunu Visual Basic'te yazarsanız, yönergesi template içermelidir language="VB". "C#" varsayılan değerdir.

Tasarım Zamanı T4 Metin Şablonunda Hata Ayıklama

Metin şablonunda hata ayıklamak için:

  • yönergesine template ekleyindebug="true". Örneğin:

    <#@ template debug="true" hostspecific="false" language="C#" #>

  • Şablonda kesme noktalarını, normal kod için yaptığınız gibi ayarlayın.

  • Çözüm Gezgini metin şablonu dosyasının kısayol menüsünden T4 Şablonunda Hata Ayıkla'yı seçin.

    Şablon çalışır ve kesme noktalarında durur. Değişkenleri inceleyebilir ve kodda normal şekilde ilerleyebilirsiniz.

İpucu

debug="true" oluşturulan koda daha fazla satır numaralandırma yönergesi ekleyerek oluşturulan kodu metin şablonuyla daha doğru bir şekilde eşler. Bunu dışarıda bırakırsanız, kesme noktaları çalıştırmayı yanlış durumda durdurabilir.

Ancak hata ayıklamadığınız zamanlarda bile yan tümcesini şablon yönergesinde bırakabilirsiniz. Bu, performansta yalnızca çok küçük bir düşüşe neden olur.

Çözümünüz için Kod veya Kaynak Oluşturma

Modele bağlı olarak değişen program dosyaları oluşturabilirsiniz. Model, veritabanı, yapılandırma dosyası, UML modeli, DSL modeli veya başka bir kaynak gibi bir giriştir. Genellikle aynı modelden birkaç program dosyası oluşturursunuz. Bunu başarmak için, oluşturulan her program dosyası için bir şablon dosyası oluşturursunuz ve tüm şablonların aynı modeli okumasını sağlarsınız.

Program kodu veya kaynakları oluşturmak için

  1. çıkış yönergesini değiştirerek .cs, .vb, .resx veya .xml gibi uygun türde bir dosya oluşturun.

  2. İstediğiniz çözüm kodunu oluşturacak kodu ekleyin. Örneğin, bir sınıfta üç tamsayı alan bildirimi oluşturmak istiyorsanız:

    
    <#@ template debug="false" hostspecific="false" language="C#" #>
    <#@ output extension=".cs" #>
    <# var properties = new string [] {"P1", "P2", "P3"}; #>
    // This is generated code:
    class MyGeneratedClass {
    <# // This code runs in the text template:
      foreach (string propertyName in properties)  { #>
      // Generated code:
      private int <#= propertyName #> = 0;
    <# } #>
    }
    
  3. Dosyayı kaydedin ve şu kodu içeren oluşturulan dosyayı inceleyin:

    class MyGeneratedClass {
      private int P1 = 0;
      private int P2 = 0;
      private int P3 = 0;
    }
    

Kod Oluşturma ve Oluşturulan Metin

Program kodu oluştururken, şablonunuzda yürütülen oluşturma kodunun ve çözümünüzün bir parçası haline gelen sonuçta oluşturulan kodun kafa karıştırıcı olmasını önlemek en önemlidir. İki dilin aynı olması gerekmez.

Önceki örnekte iki sürüm vardır. Bir sürümde, kod oluşturma C# dilindedir. Diğer sürümde, oluşturan kod Visual Basic'tir. Ancak her ikisi tarafından oluşturulan metin aynıdır ve bir C# sınıfıdır.

Aynı şekilde, herhangi bir dilde kod oluşturmak için bir Visual C# şablonu kullanabilirsiniz. Oluşturulan metnin belirli bir dilde olması ve program kodu olması gerekmez.

Metin şablonlarını yapılandırma

İyi bir uygulama olarak şablon kodunu iki bölüme ayırma eğilimindeyiz:

  • Değişkenlerdeki değerleri ayarlayan ancak metin blokları içermeyen bir yapılandırma veya veri toplama bölümü. Önceki örnekte, bu bölüm öğesinin başlatılmasıdır properties.

    Buna bazen "model" bölümü adı verilir çünkü mağaza içi bir model oluşturur ve genellikle bir model dosyasını okur.

  • Değişkenlerin değerlerini kullanan metin oluşturma bölümü (foreach(...){...} örnekte).

    Bu gerekli bir ayrım değildir, ancak metin içeren bölümün karmaşıklığını azaltarak şablonu okumayı kolaylaştıran bir stildir.

Dosyaları veya diğer kaynakları okuma

Bir model dosyasına veya veritabanına erişmek için şablon kodunuz System.XML gibi derlemeleri kullanabilir. Bu derlemelere erişim elde etmek için aşağıdakiler gibi yönergeler eklemeniz gerekir:

<#@ assembly name="System.Xml.dll" #>
<#@ import namespace="System.Xml" #>
<#@ import namespace="System.IO" #>

yönergesi assembly , belirtilen derlemeyi Visual Studio projesinin Başvurular bölümüyle aynı şekilde şablon kodunuz için kullanılabilir hale getirir. Otomatik olarak başvurulan System.dll başvuru eklemeniz gerekmez. yönergesi import , normal bir program dosyasındaki yönergeyle aynı şekilde tam adlarını kullanmadan türleri kullanmanıza using olanak tanır.

Örneğin, System.IO içeri aktardıktan sonra şunları yazabilirsiniz:


<# var properties = File.ReadLines("C:\\propertyList.txt");#>
...
<# foreach (string propertyName in properties) { #>
...

Göreli yol adı olan bir dosyayı açma

Metin şablonuna göre bir konumdan dosya yüklemek için kullanabilirsiniz this.Host.ResolvePath(). kullanmak this.Hostiçin içinde ayarlamanız hostspecific="true"templategerekir:

<#@ template debug="false" hostspecific="true" language="C#" #>

Daha sonra yazabilirsiniz, örneğin:

<# string filename = this.Host.ResolvePath("filename.txt");
  string [] properties = File.ReadLines(filename);
#>
...
<#  foreach (string propertyName in properties { #>
...

Geçerli şablon dosyasının adını tanımlayan öğesini de kullanabilirsiniz this.Host.TemplateFile.

this.Host türü (VB, Me.Hostiçinde) şeklindedirMicrosoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost.

Visual Studio'dan veri alma

Visual Studio'da sağlanan hizmetleri kullanmak için özniteliğini hostspecific ayarlayın ve derlemeyi EnvDTE yükleyin. uzantı yöntemini içeren öğesini içeri aktarınMicrosoft.VisualStudio.TextTemplatingGetCOMService(). Ardından, DTE ve diğer hizmetlere erişmek için IServiceProvider.GetCOMService() kullanabilirsiniz. Örneğin:

<#@ template hostspecific="true" language="C#" #>
<#@ output extension=".txt" #>
<#@ assembly name="EnvDTE" #>
<#@ import namespace="Microsoft.VisualStudio.TextTemplating" #>
<#
  IServiceProvider serviceProvider = (IServiceProvider)this.Host;
  EnvDTE.DTE dte = (EnvDTE.DTE) serviceProvider.GetCOMService(typeof(EnvDTE.DTE));
#>

Number of projects in this VS solution:  <#= dte.Solution.Projects.Count #>

İpucu

Metin şablonu kendi uygulama etki alanında çalışır ve hizmetlere hazırlama yoluyla erişilir. Bu durumda GetCOMService(), GetService() değerinden daha güvenilirdir.

Kodu otomatik olarak yeniden oluşturma

Genellikle, bir Visual Studio çözümündeki birkaç dosya tek bir giriş modeliyle oluşturulur. Her dosya kendi şablonundan oluşturulur, ancak şablonların tümü aynı modele başvurur.

Kaynak model değişirse çözümdeki tüm şablonları yeniden çalıştırmanız gerekir. Bunu el ile yapmak için, Oluştur menüsünde Tüm Şablonları Dönüştür'ü seçin.

Visual Studio Modelleme SDK'sını yüklediyseniz, bir derleme gerçekleştirdiğinizde tüm şablonların otomatik olarak dönüştürülmesini sağlayabilirsiniz. Bunu yapmak için, proje dosyanızı (.csproj veya .vbproj) bir metin düzenleyicisinde düzenleyin ve dosyanın sonuna, diğer <import> deyimlerden sonra aşağıdaki satırları ekleyin. SDK stilindeki bir projede, proje dosyasında herhangi bir yere gidebilir.

Not

Metin Şablonu Dönüştürme SDK'sı ve Visual Studio Modelleme SDK'sı, Visual Studio'nun belirli özelliklerini yüklediğinizde otomatik olarak yüklenir.

<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v17.0\TextTemplating\Microsoft.TextTemplating.targets" />
<PropertyGroup>
   <TransformOnBuild>true</TransformOnBuild>
   <!-- Other properties can be inserted here -->
</PropertyGroup>

Daha fazla bilgi için bkz . Derleme İşleminde Kod Oluşturma.

Hata raporlama

Visual Studio hata penceresine hata ve uyarı iletileri yerleştirmek için şu yöntemleri kullanabilirsiniz:

Error("An error message");
Warning("A warning message");

Var olan bir dosyayı şablona dönüştürme

Şablonların kullanışlı bir özelliği, ekledikleri program koduyla birlikte oluşturdukları dosyalara çok benzemeleridir. Bu, şablon oluşturmak için kullanışlı bir yöntem önerir. İlk olarak Visual C# dosyası gibi sıradan bir dosyayı prototip olarak oluşturun ve ardından sonuçta elde edilen dosyayı değişen oluşturma kodunu aşamalı olarak tanıtın.

Var olan bir dosyayı tasarım zamanı şablonuna dönüştürmek için

  1. Visual Studio projenize, oluşturmak istediğiniz türde bir dosya (örneğin .cs, , .vbveya .resx dosyası) ekleyin.

  2. Çalıştığından emin olmak için yeni dosyayı test edin.

  3. Çözüm Gezgini dosya adı uzantısını .tt olarak değiştirin.

  4. .tt dosyasının aşağıdaki özelliklerini doğrulayın:

    Özellik Ayar
    Özel Araç = Texttemplatingfilegenerator
    Derleme Eylemi = Hiçbiri
  5. Dosyanın başına aşağıdaki satırları ekleyin:

    <#@ template debug="false" hostspecific="false" language="C#" #>
    <#@ output extension=".cs" #>
    

    Visual Basic'te şablonunuzun oluşturma kodunu yazmak istiyorsanız, özniteliği yerine "C#"olarak "VB" ayarlayınlanguage.

    özniteliğini extension , oluşturmak istediğiniz dosya türü için dosya adı uzantısı olarak ayarlayın; örneğin .cs, , .resxveya .xml.

  6. Dosyayı kaydedin.

    Belirtilen uzantıya sahip bir yan kuruluş dosyası oluşturulur. Özellikleri dosya türü için doğrudur. Örneğin, bir .cs dosyasının Derleme Eylemi özelliği Derleme olabilir.

    Oluşturulan dosyanın özgün dosyayla aynı içeriği içerdiğini doğrulayın.

  7. Dosyanın değişiklik göstermek istediğiniz bir bölümünü belirleyin. Örneğin, yalnızca belirli koşullar altında görünen bir bölüm ya da yinelenen veya belirli değerlerin değiştiği bir bölüm. Kod oluşturma ekleme. Dosyayı kaydedin ve yan dosyanın doğru oluşturulduğunu doğrulayın. Bu adımı yineleyin.

Kod Oluşturma Yönergeleri

Lütfen bkz . T4 Metin Şablonları Yazma Yönergeleri.