Aracılığıyla paylaş


T4 metin şablonları kullanarak tasarım zamanı kod oluşturma

Tasarım zamanı T4 metin şablonları program kodu ve diğer dosyaları oluşturmak için izin, Visual Studio proje.Genellikle, böylece verilerden göre oluşturdukları kodu farklılık şablonuna yazmak bir modeli.Bir dosya veya veritabanı uygulamanızın gereksinimleri hakkında önemli bilgiler içeren bir modeldir.

Örneğin, bir tablo veya bir diyagram olarak bir iş akışını tanımlayan bir model olabilir.Modelden iş akışı yürütür yazılım oluşturabilir.Kullanıcılarınızın gereksinimlerini değiştirdiğinizde, yeni iş akışı kullanıcılarıyla tartışmak daha kolaydır.İş akışı kodu yeniden oluşturuluyor kodunu el ile güncelleştirmeye göre daha güvenilirdir.

[!NOT]

A modeli bir uygulamanın belirli bir boy açıklayan bir veri kaynağıdır.Bu, herhangi bir dosya veya veritabanı içinde herhangi bir biçimde olabilir.uml modeli veya etki alanına özgü dil modeli gibi belirli herhangi bir biçimde olması yok.Tabloları veya xml dosyaları biçiminde tipik modelleridir.

Büyük olasılıkla zaten kod üretimi ile tanıdık.Kaynakların tanımladığınızda bir .resx içinde dosya sizin Visual Studio çözümü, sınıflar ve yöntemler kümesi oluşturulur otomatik olarak.Kaynak dosyasının, sınıflar ve yöntemler düzenlemek gerekiyordu daha çok daha kolay ve daha güvenilir düzenlemek için kaynak yapar.Metin şablonları ile aynı şekilde kendi tasarımınız bir kaynaktan gelen kodu oluşturabilirsiniz.

Metin şablonu oluşturmak istediğiniz metin ve metin değişken bölümlerini oluşturan program kodunu içerir.Program kodu ve yinelemek veya koşullu olarak oluşturulan metin bölümlerini atlamasını sağlar.Oluşturulan metin yapabilirsiniz kendi uygulamanızın parçasını oluşturan program kodunun olması.

Tasarım zamanı T4 metin şablonu oluşturma

Visual Studio'da tasarım zamanında T4 şablonu oluşturmak için

  1. Oluşturma bir Visual Studio proje veya varolan birini açın.

    Örneğin, Dosya menüsünden seçin Yeni, Proje.

  2. Metin şablonu dosyasını projenize eklemek ve uzantısı .tt olan bir ad verin.

    Bunu yapmak için Çözüm Gezgini, projenizin kısayol menüsünden seçin Ekle, Yeni madde.İçinde Add New Item iletişim kutusunu seç Metin şablonu Orta bölmeden.

    Dikkat edin Özel araç özelliği dosyanın TextTemplatingFileGenerator.

  3. Dosyayı açın.Ayrıca, aşağıdaki yönergeleri zaten içerecektir:

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

    Şablonu eklediyseniz bir Visual Basic , project language özniteliği olacaktır "VB".

  4. Bazı metin dosyanın sonuna ekleyin.Örne?in:

    Hello, world!
    
  5. Dosyayı kaydedin.

    Görebilirsiniz, bir Güvenlik Uyarısı bir ileti kutusu şablonu çalıştırmak istediğinizi onaylamanızı ister.Tamam düğmesini tıklatın.

  6. İçinde Çözüm Gezgini, şablon dosyası düğümünü genişletin ve uzantısı .txt olan bir dosyayı bulabilirsiniz.Şablondan oluşturulan metin dosyası içerir.

    [!NOT]

    Projenizin Visual Basic projesi ise tıklatmalısınız Tüm dosyaları göster çıktı dosyasını görmek için.

Dd820620.collapse_all(tr-tr,VS.110).gifKodu yeniden oluşturuluyor

Aşağıdaki durumların herhangi bayi dosya oluşturma şablonu yürütülür:

  • Şablonu düzenleyin ve daha sonra odağı farklı bir Visual Studio pencere.

  • Şablonu Kaydet.

  • Tıklatın Tüm Şablonları Dönüştür , Yapı menüsü.Bu tüm şablonları Dönüştür Visual Studio çözüm.

  • İçinde Çözüm Gezgini, kısayol menüsünde herhangi bir dosya, seçim Özel araç çalıştırmak.Seçili alt şablonların dönüştürmek için bu yöntemi kullanın.

Ayrıca ayarlayabilirsiniz bir Visual Studio projesi böylece bunlar okunan veri dosyaları değiştirildi, şablonlar çalıştırılır.Daha fazla bilgi için bkz. Kodu otomatik olarak yeniden oluşturuluyor.

Metin değişkeni oluşturma

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

Program kodunu kullanarak metni oluşturmak için

  1. İçeriği değiştirmek .tt dosyası:

    <#@ 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 #>
    <# } #>
    
    <#@ template hostspecific="false" language="VB" #>
    <#@ output extension=".txt" #>
    <#Dim top As Integer = 10
    
    For i As Integer = 0 To top
    #>
        The square of <#= i #> is <#= i*i #>
    <#
    Next
    #>
    
  2. .Tt dosyayı kaydedin ve yeniden oluşturulan .txt dosyasını inceleyin.Bu sayıların 0 ile 9 kareler listeler.

Deyimler içinde çevrelediği dikkat edin <#...#>ve deyimler içinde tek <#=...#>.Daha fazla bilgi için bkz. T4 metin şablon yazma.

Şablonunuzda kod yazma, Visual Basic, template yönergesi içermelidir language="VB"."C#"varsayılan değerdir.

Tasarım zamanı T4 metin şablonu hata ayıklama

Metin şablonu hata ayıklamak için:

  • Ekle debug="true" na template yönergesi.Örne?in:

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

  • Sıradan kodu için yaptığınız biçimde şablonda kesme noktalarını ayarlayın.

  • Seçim Hata ayıklama T4 şablon metin şablonu dosyasının Solution Explorer'da kısayol menüsünden.

Şablon çalıştırmak ve kesme sırasında durdurur.Değişkenleri incelemek ve her zamanki yolla kod boyunca adım.

İpucuİpucu

debug="true"Metin şablonu için oluşturulan kod yönergeleri numaralandırma veya daha fazla satır ekleyerek daha doğru bir şekilde eşleştirmek oluşturulan kodu sağlar.Out bırakırsanız, kesme noktaları yanlış durumda çalışma durdurabilir.

Ama bile, değil ayıklarken yan tümcesi içinde şablon yönergesi bırakın.Bu performans çok küçük bir bırakma neden olur.

Çözümünüz için kod veya kaynakları oluşturma

Modeline bağlı olarak, farklı program dosyaları oluşturabilirsiniz.Giriş gibi bir veritabanı, yapılandırma dosyası, uml model, dsl modeli veya başka bir kaynaktan bir modeldir.Birkaç genellikle oluşturmak aynı modelden program dosyaları olan.Bunu başarmak için oluşturulan program her dosya için bir şablon dosyası oluşturur ve tüm şablonları aynı model okumuş.

Program kodunu veya kaynakları oluşturmak için

  1. .Cs, .vb, .resx veya .xml gibi uygun türde bir dosya oluşturmak için çıkış yönergesi değiştirin.

  2. Gereksinim duyduğunuz çözüm kodu oluşturacak kodu ekleyin.Örneğin, bir sınıf içinde üç tamsayı alanı bildirimleri oluşturmak istiyorsanız:

                      <#@ template debug="false" hostspecific="false" language="C#" #>
    <#@ output extension=".cs" #>
    <# var properties = new string [] {"P1", "P2", "P3"}; #>
    class MyGeneratedClass {
    <# 
      foreach (string propertyName in properties)
      { #>
      private int <#= propertyName #> = 0;
    <# } #>
    }
    
    <#@ template debug="false" hostspecific="false" language="VB" #>
    <#@ output extension=".cs" #>
    <# Dim properties = {"P1", "P2", "P3"} #>
    class MyGeneratedClass {
    <# 
       For Each propertyName As String In properties
    #>
      private int <#= propertyName #> = 0;
    <#
       Next
    #>
    }
    
  3. Dosyayı kaydedin ve şimdi aşağıdaki kodu içeren oluşturulan dosyanın inceleyin:

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

Dd820620.collapse_all(tr-tr,VS.110).gifKod ve oluşturulan metin oluşturma

Program kod üretirken şablonunuzda yürüten şablonunuzda kod oluşturmaya ve çözümünüzün bir parçası haline gelir elde edilen oluşturulan kod kafa önlemek çok önemlidir.İki dil aynı olması gerekmez.

Önceki örnekte iki sürümü vardır.Bir sürüm oluşturma C# kodudur.Diğer sürüm, oluşturma Visual Basic kodudur.Ancak her ikisi tarafından oluşturulan metinler aynıdır ve bir C# sınıfı değil.

Aynı şekilde, kullanabileceðiniz bir Visual C# kod herhangi bir dilde oluşturmak için şablon.Belirli bir dilde olacak şekilde oluşturulmuş metin yok ve program kodu yok.

Dd820620.collapse_all(tr-tr,VS.110).gifMetin şablonlarını yapılandırma

Şablon kodu iki bölüme ayırmak için iyi bir kaç biz eğilimindedir:

  • Yapılandırma veya veri toplama bölümü, değişkenlerin değerlerini ayarlar, ancak metin blokları içermez.Önceki örnekte, bu başlatılması parçasıdır properties.

    "Model" bölümünde, bu bazen çünkü mağaza model oluşturur ve genellikle model dosyasını okur denir.

  • Metin oluşturma bölümü (foreach(...){...} örneğin), değişkenlerin değerlerini kullanır.

Bu gerekli bir ayrım değildir, ancak şablon metin içeren bölümü karmaşıklığını azaltarak okunması kolay kılan bir stil değil.

Okuma dosyaları veya diğer kaynaklar

Bir model dosyası veya veritabanı erişimi için şablon kodunuzu derlemeler System.XML gibi kullanabilirsiniz.Bu derlemeler erişmek için bu gibi yönergeleri eklemeniz gerekir:

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

assembly Yönergesinin yaptığı belirtilen derleme şablon kodunuzun kullanılabilir başvurular bölümünde aynı şekilde bir Visual Studio proje.Başvurulan otomatik System.dll, bir başvuru eklemek gerekli değildir.import Yönergesi türleri aynı şekilde tam adlarını kullanarak olmadan kullanmanıza olanak verir using yönergesini de sıradan bir program dosyası.

Örneğin, alma işleminden sonra System.IO, siz yazabilirsiniz:

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

Dd820620.collapse_all(tr-tr,VS.110).gifBir göreceli yol adı ile dosya açma

Metin şablonu göre bir konumdan bir dosya yüklemek için kullanabileceğiniz this.Host.ResolvePath().Bunu kullanmak için.Ana bilgisayar, ayarlamanız gerekir hostspecific="true" , template:

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

Daha sonra örneğin yazabilirsiniz:

<# string fileName = this.Host.ResolvePath("filename.txt");
  string [] properties = File.ReadLines(filename);
#>
...
<#  foreach (string propertyName in properties { #>
...
<# Dim fileName = Me.Host.ResolvePath("propertyList.txt")
   Dim properties = File.ReadLines(filename)
#>
...
<#   For Each propertyName As String In properties
...
#>

Ayrıca this.Host.TemplateFile, geçerli şablon dosyasının adını tanımlar.

The type of this.Host (in VB, Me.Host) is Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost.

Dd820620.collapse_all(tr-tr,VS.110).gifVeri almaVisual Studio

Sağlanan hizmetleri kullanmak için Visual Studio, set hostSpecific özniteliği ve yük EnvDTE derleme.Daha sonra IServiceProvider.GetCOMService() dte ve diğer hizmetlere erişmek için de kullanabilirsiniz.Örne?in:

<#@ template hostspecific="true" language="C#" #>
<#@ output extension=".txt" #>
<#@ assembly name="EnvDTE" #>
<#
  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İpucu

Metin şablonu kendi uygulama etki alanında çalışır ve Hizmetleri sıralaması tarafından erişilir.Bu durumda GetCOMService() GetService() daha fazla güvenilir değildir.

Kodu otomatik olarak yeniden oluşturuluyor

Genellikle, çok sayıda dosyayı bir Visual Studio çözüm bir giriş modeli ile oluşturulur.Her dosya kendi şablon, ancak aynı modeli başvuran tüm şablonları oluşturulur.

Kaynak modeli değişirse, çözüm, tüm şablonları yeniden çalıştırın.Bunu el ile yapmak için Tüm Şablonları Dönüştür , Yapı menüsü.

Yüklediyseniz Visual Studio görselleştirme ve modelleme sdk, sağlayabilirsiniz bir yapı oluşturma gerçekleştirmeniz olduğunda otomatik olarak dönüştürülen tüm şablonları.Bunu yapmak için proje dosyanızı (.csproj veya .vbproj) bir metin düzenleyicisinde düzenlemeniz ve sonra diğer yakın dosyanın sonuna aşağıdaki satırları ekleyin <import> ifadeler:

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

Daha fazla bilgi için bkz. Oluşturma işlemi, kod oluşturma.

Hata Raporlama

Hata ve uyarı iletileri yerleştirmek için Visual Studio hata penceresinde bu yöntemleri kullanabilirsiniz:

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

Varolan bir dosyayı bir şablona dönüştürme

Yararlı şablonlar çok oluşturdukları, bazı eklenen program kodu dosyaları gibi görünüyorlar olduğunu özelliğidir.Bu yararlı bir şablon oluşturma yöntemi önerir.İlk sıradan bir dosya bir prototip oluşturma gibi bir Visual C# dosya ve yavaş yavaş ortaya çıkan dosya değişen kod tanıtır.

Bir tasarım şablonu varolan bir dosyayı dönüştürmek için

  1. İçin Visual Studio gibi oluşturmak istediğiniz türde bir dosya eklemek, proje bir .cs, .vb, veya .resx dosyası.

  2. Yeni dosyayı çalıştığından emin olmak için sınayın.

  3. Çözüm Gezgini'nde, dosya adı uzantısını değiştirmek .tt.

  4. Aşağıdaki özelliklerini doğrulamak .tt dosyası:

    Özel araç =

    TextTemplatingFileGenerator

    Build Action =

    None

  5. Dosyanın başına aşağıdaki satırları ekleyin:

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

    Şablonunuza oluşturma kodunu yazmak isterseniz Visual Basic, set language özniteliğini "VB" yerine "C#".

    Set extension , örneğin oluşturmak istediğiniz dosya türünün dosya adı uzantısı özniteliği .cs, .resx, veya .xml.

  6. Dosyayı kaydedin.

    Bayi dosya, belirtilen uzantı ile oluşturulur.Dosya türü için doğru özellikleri.Örneğin, Yapı eylemi .cs dosyasının özellik olurdu derleme.

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

  7. Değiştirmek istediğiniz dosyanın bir bölümünü belirleyin.Örneğin, yalnızca belirli koşullar altında görünen bir parçası veya bir bölümü, yinelenen veya burada belirli değerleri değişir.Şablonunuzda kod ekleyin.Dosyayı kaydedin ve bayi dosya doğru şekilde oluşturulan doğrulayın.Bu adımı yineleyin.

Kod oluşturma için yönergeler

Lütfen bkz: T4 metin şablonları Yazma Kılavuzu.

Sonraki adımlar

Sonraki adım

Konu

Yazma ve hata ayıklama yardımcı İşlevler, eklenen dosyaların ve kalıcı verileri kullanan kod ile daha gelişmiş metin şablonu.

T4 metin şablon yazma

Belgelere çalışma zamanında şablonlardan oluşturun.

T4 metin şablonlarıyla çalışma zamanı metin oluşturma

Metin oluşturma dışında çalıştırmak Visual Studio.

TextTransform yardımcı programı ile dosya oluşturuluyor

Etki alanına özgü dil formdaki verileri dönüştürme.

Bir etki alanına özgü dil kodu oluşturma

Yönergesi işlemciler kendi veri kaynaklarını dönüştürmek için yazma.

T4 metin dönüştürme özelleştirme

Ayrıca bkz.

Kavramlar

T4 metin şablonları Yazma Kılavuzu