Aracılığıyla paylaş


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

Metin dizeleri zamanında uygulamanızda kullanarak oluşturabileceğiniz Visual Studio çalışma zamanı metin şablonları.Burada uygulamayı yürüten bilgisayar olması gerekmez Visual Studio.Derleme zamanında zamanında yürütülen kod şablonu oluşturduğundan bazen "metni şablonları aðaçtaki" çalışma zamanı şablonları denir.

Oluşturulan dize ve program kod parçalarını içinde görüneceği şekilde her metin karışımını şablondur.Program parçaları değişken bölümlerini dize değerlerini sağlamanız ve koşullu ve yinelenen bölümleri de denetler.

Örneğin, bir html raporu oluşturan bir uygulama aşağıdaki şablonu kullanılabilir.

<#@ template language="C#" #>
<html><body>
<h1>Sales for Previous Month</h2>
<table>
    <# for (int i = 1; i <= 10; i++)
       { #>
         <tr><td>Test name <#= i #> </td>
             <td>Test value <#= i * i #> </td> </tr>
    <# } #>
 </table>
This report is Company Confidential.
</body></html>

Şablon değişken bölümleri program kodu ile almıştır html sayfası olduğuna dikkat edin.Böyle bir sayfa tasarımı, html sayfasının statik bir prototip yazarak başlamadan.Sonraki bir gün değişen içeriği oluşturur program kodunu içeren tablo ve diğer değişken bölümleri sonra koyabilirsiniz.

Kendi uygulama yapar bir şablonu kullanarak, yazma ifadeleri uzun bir dizi, yapabileceğinizden son çıktının bkz kolaydır.Çıkış şeklinde değişiklik yapmak daha kolay ve daha güvenilir.

Tüm uygulama çalışma zamanı metin şablon oluşturma

Metin çalışma zamanı şablonu oluşturmak için

  1. Solution Explorer'da projenize, kısayol menüsünden seçin Ekle, New Item.

  2. İçinde Add New Item Seç iletişim kutusundaki Çalışma zamanı metin şablonu.(De Visual Basic altında arayın Ortak Items\General.)

  3. Şablonunuz için bir ad yazın.

    [!NOT]

    Şablon dosyası adı, oluşturulan kodda bir sınıf adı olarak kullanılır.Bu nedenle, boşluk veya noktalama işareti olmamalıdır.

  4. Seçim ekleme.

    Yeni bir dosya uzantısı olan oluşturulan .tt.Kendi Özel araç özelliği ayarlanmış TextTemplatingFilePreprocessor.Aşağıdaki satırları içerir:

    <#@ template language="C#" #>
    <#@ assembly name="System.Core" #>
    <#@ import namespace="System.Linq" #>
    <#@ import namespace="System.Text" #>
    <#@ import namespace="System.Collections.Generic" #>
    

Çalışma zamanı şablonu için varolan bir dosya dönüştürme

Bir şablon oluşturmak için iyi bir yolu var çıktısı örneği dönüştürmektir.Örneğin, uygulamanızın html dosyaları oluşturur, düz bir html dosyası oluşturarak başlatabilirsiniz.Düzgün çalıştığını ve görünümünü doğru olduğundan emin olun.İçine dahil, Visual Studio proje ve bir şablona dönüştürün.

Çalışma zamanı şablonu için var olan bir metin dosyasını dönüştürmek için

  1. Dosyaya dahil, Visual Studio proje.Solution Explorer'da proje kısayol menüsünden seçin Ekle, Varolan madde.

  2. Dosya kümesi Özel araçlar özelliğini TextTemplatingFilePreprocessor.Solution Explorer'da, dosyayı kısayol menüsünden seçin özelliklerini.

    [!NOT]

    Özellik zaten ayarlı ise, onu olduğundan emin TextTemplatingFilePreprocessor ve TextTemplatingFileGenerator.Uzantısı zaten bir dosya eklerseniz, bu durum .tt.

  3. Dosya adı uzantısını değiştirmek .tt.Bu adım isteğe bağlıdır, ancak, yanlış bir düzenleyicide açarak önlemenize yardımcı olur.

  4. Dosya adı ana bölümünden herhangi bir boşluk veya noktalama işareti kaldırın.Örneğin, "Web Page.tt" yanlış olacaktır, ancak "MyWebPage.tt" doğrudur.Dosya adı, oluşturulan kodda bir sınıf adı olarak kullanılır.

  5. Aşağıdaki satırı dosyanın başlangıcına ekleyin.Visual Basic projesinde çalışıyorsanız, "vb" ile "C#" değiştirin.

    <#@ template language="C#" #>

Çalışma zamanı şablonu içeriği

Ee844259.collapse_all(tr-tr,VS.110).gifŞablon yönergesi

İlk satır şablonu dosyasını oluşturduğunuz andaki haliyle tutun:

<#@ template language="C#" #>

Dil parametresi, projenizin dile bağlıdır.

Ee844259.collapse_all(tr-tr,VS.110).gifDüz içerik

Düzenleme .tt uygulamanızı oluşturmak istediğiniz metni içeren dosya.Örne?in:

<html><body>
<h1>Sales for January</h2>
<!-- table to be inserted here -->
This report is Company Confidential.
</body></html>

Ee844259.collapse_all(tr-tr,VS.110).gifKatıştırılmış program kodu

Program kodu arasında ekleyebilirsiniz <# ve #>.Örne?in:

<table>
    <# for (int i = 1; i <= 10; i++)
       { #>
         <tr><td>Test name <#= i #> </td>
             <td>Test value <#= i * i #> </td> </tr>
    <# } #>
 </table>
<table>
<#
    For i As Integer = 1 To 10
#>
    <tr><td>Test name <#= i #> </td>
      <td>Test value <#= i*i #> </td></tr>
<#
    Next
#>
</table>

Deyimleri arasına eklenen dikkat edin <# ... #> ve ifadeler arasında eklenen <#= ... #>.Daha fazla bilgi için bkz. T4 metin şablon yazma.

Şablon kullanma

Ee844259.collapse_all(tr-tr,VS.110).gifŞablondan oluşturulan kodu

Kaydettiğiniz her .tt bir dosya .cs veya .vb dosyası oluşturulur.Solution Explorer'da bu dosyayı görmek için genişletme .tt dosya düğümü.Visual Basic projesinde, düğümünü tıklattığınızda görebilecektir Show All Files Solution Explorer araç çubuğunda.

Bayi bu dosya adında bir yöntemi içeren kısmi bir sınıf içerdiğine dikkat edin TransformText().Uygulamanız bu yöntemini çağırabilir.

Ee844259.collapse_all(tr-tr,VS.110).gifÇalışma zamanında metni oluşturma

Uygulama kodunuzda şablonunuz aşağıdaki gibi bir arama içerik üretebilir:

MyWebPage page = new MyWebPage();
String pageContent = page.TransformText();
System.IO.File.WriteAllText("outputPage.html", pageContent);
Dim page = New My.Templates.MyWebPage
Dim pageContent = page.TransformText()
System.IO.File.WriteAllText("outputPage.html", pageContent)

Üretilen sınıfın belirli bir ad alanı yerleştirmek için Özel aracı ad metin şablon dosyası özelliği.

Ee844259.collapse_all(tr-tr,VS.110).gifMetin çalışma zamanı şablonları hata ayıklama

Hata ayıklama ve çalışma zamanı metin şablonları sıradan kodu aynı şekilde test edin.

Metin şablonunda bir kesme noktası ayarlayabilirsiniz.Uygulama Visual Studio hata ayıklama modunda Başlat, kod arasında ve her zamanki yolla İzleme deyimleri değerlendirmek.

Ee844259.collapse_all(tr-tr,VS.110).gifKurucuda parametreleri iletmek

Genellikle bir şablonu diğer bölümlerini uygulamanın bazı veri almanız gerekir.Bu kolay hale getirmek için şablon tarafından oluşturulmuş kısmi bir sınıf kodudur.Projenizde başka bir dosyaya başka bir bölümünü aynı sınıfı oluşturabilirsiniz.Bu dosya Oluşturucu parametreleri, özellikleri ve şablonda katıştırılmış kod tarafından hem uygulamanın geri kalanı tarafından erişilen olabilir işlevleri içerebilir.

Örneğin, ayrı bir dosya oluşturabilirsiniz MyWebPageCode.cs:

partial class MyWebPage
{
    private MyData m_data;
    public MyWebPage(MyData data) { this.m_data = data; }}

Şablon dosyanızın MyWebPage.tt, siz yazabilirsiniz:

<h2>Sales figures</h2>
<table>
<# foreach (MyDataItem item in m_data.Items) 
   // m_data is declared in MyWebPageCode.cs
   { #>
      <tr><td> <#= item.Name #> </td>
          <td> <#= item.Value #> </td></tr>
<# } // end of foreach
#>
</table>

Uygulamada bu şablonu kullanmak için:

MyData data = ...;
MyWebPage page = new MyWebPage(data);
String pageContent = page.TransformText();
System.IO.File.WriteAllText("outputPage.html", pageContent);

Ee844259.collapse_all(tr-tr,VS.110).gifVisual Basic'te yapıcı parametreleri

De Visual Basic, ayrı bir dosya MyWebPageCode.vb içerir:

Namespace My.Templates
  Partial Public Class MyWebPage
    Private m_data As MyData
    Public Sub New(ByVal data As MyData)
      m_data = data
    End Sub
  End Class
End Namespace

Şablon dosyası içerebilir:

<#@ template language="VB" #>
<html><body>
<h1>Sales for January</h2>
<table>
<#
    For Each item In m_data.Items
#>
    <tr><td>Test name <#= item.Name #> </td>
      <td>Test value <#= item.Value #> </td></tr>
<#
    Next
#>
</table>
This report is Company Confidential.
</body></html>

Ve şablon parametre yapıcısına ileterek çağrılması:

Dim data = New My.Templates.MyData
    ' Add data values here ....
Dim page = New My.Templates.MyWebPage(data)
Dim pageContent = page.TransformText()
System.IO.File.WriteAllText("outputPage.html", pageContent)

Ee844259.collapse_all(tr-tr,VS.110).gifŞablon özelliklerinde veri iletme

Şablon veri iletme için alternatif bir yöntem ortak özellikleri kısmi sınıf tanımının şablonu sınıfında eklemektir.Uygulamanızın çağırmadan önce özellikleri ayarlayabilirsiniz TransformText().

Kısmi bir tanımı şablonu sınıfınızda alanları ekleyebilirsiniz.Bu şablon ardışık çalıştırma arasında veri iletmek için etkinleştirir.

Ee844259.collapse_all(tr-tr,VS.110).gifKısmi sınıf kodunu kullanın.

Geliştiricilerin çoğu şablonlarda büyük gövdeleri kod yazılmasını önlemek tercih.Bunun yerine, şablon dosyası olarak aynı ada sahip kısmi bir sýnýftaki yöntemleri tanımlar.Şablondan bu yöntemi çağırın.Bu yolla, şablon daha açıkça hangi hedef çıktı dizesini nasıl görüneceğini gösterir.Görünümü hakkında tartışmalar sonucu görüntülediği verileri oluşturma mantığından ayrılabilir.

Ee844259.collapse_all(tr-tr,VS.110).gifDerlemeler ve başvurular

Şablon kodunuzun başvurmak istiyorsanız, bir.net ya da diğer birleştirme gibi System.Xml.dll, projenizin için eklemeniz gereken başvuruları her zamanki yolla.

Aynı şekilde bir ad alanını almak istiyorsanız bir using deyimi, bunu yapabilir import yönergesi:

<#@ import namespace="System.Xml" #>

Bu yönergeleri hemen sonra dosyanın başlangıcına yerleştirilmelidir <#@template yönergesi.

Ee844259.collapse_all(tr-tr,VS.110).gifPaylaşılan içerik

Çeşitli şablonları arasında paylaşılan metin varsa, ayrı bir dosyaya yerleştirin ve görünmesi gereken her dosyasına ekleyin:

<#@include file="CommonHeader.txt" #>

Eklenen içeriğin herhangi bir program kodu ve düz metin karışımını içerebilir ve diğer içerebilir yönergeleri ve diğer yönergeleri içerir.

INCLUDE yönergesi bir şablon dosyası veya ekli bir dosya içindeki metni herhangi bir yerde kullanılabilir.

Ee844259.collapse_all(tr-tr,VS.110).gifÇalışma zamanı metin şablonlar arasındaki devralma

Soyut temel sınıf şablon yazarak çalışma zamanı şablonları arasında içerik paylaşabilirsiniz.Use inherits parametresi <@#template#> başka bir çalışma zamanı şablonu sınıf başvurmaya yönergesi.

Ee844259.collapse_all(tr-tr,VS.110).gifMiras desen: Base yöntemlerini parçaları

Aşağıdaki örnekte kullanılan desende aşağıdaki noktalara dikkat edin:

  • Temel sınıf SharedFragments sınıf özelliği blokları içinde yöntemlerini tanımlayan <#+ ... #>.

  • Temel sınıf boş bir metin içerir.Bunun yerine, tüm metin blokları içinde sınıf özellik yöntemleri ortaya çıkar.

  • Türetilmiş bir sınıf içinde tanımlanan yöntemleri çağırır SharedFragments.

  • Uygulama çağrıları TextTransform() türetilmiş bir sınıf yöntemi temel sınıf dönüştürmek değil ama SharedFragments.

  • Çalışma zamanı metin şablonları temel ve türetilmiş sınıflar olan: yani Özel araç özelliği ayarlanmış TextTemplatingFilePreprocessor.

SharedFragments.tt:

<#@ template language="C#" #>
<#+
protected void SharedText(int n)
{
#>
   Shared Text <#= n #>
<#+
}
// Insert more methods here if required.
#>

MyTextTemplate1.tt:

<#@ template language="C#" inherits="SharedFragments" #>
begin 1
   <# SharedText(2); #>
end 1

MyProgram.cs:

... 
MyTextTemplate1 t1  = new MyTextTemplate1();
string result = t1.TransformText();
Console.WriteLine(result);

Sonuç çıktısı:

begin 1
    Shared Text 2
end 1

Ee844259.collapse_all(tr-tr,VS.110).gifDevralma deseni: Ana gövde metni

Şablon Kalýtýmý kullanmak için bu alternatif yaklaşım, metin toplu temel şablonunda tanımlanır.Türetilmiş şablonları veri sağlamak ve temel içerik sığan metni Parçacık.

AbstractBaseTemplate1.tt:

<#@ template language="C#" #>

Here is the description for this derived template:
  <#= this.Description #>

Here is the fragment specific to this derived template:
<# 
  this.PushIndent("  ");
  SpecificFragment(42); 
  this.PopIndent();
#>
End of common template.
<#+ 
  // State set by derived class before calling TextTransform:
  protected string Description = "";
  // 'abstract' method to be defined in derived classes:
  protected virtual void SpecificFragment(int n) { }
#>

DerivedTemplate1.tt:

<#@ template language="C#" inherits="AbstractBaseTemplate1" #>
<# 
  // Set the base template properties:
  base.Description = "Description for this derived class"; 

  // Run the base template:
  base.TransformText();


#>
End material for DerivedTemplate1.

<#+
// Provide a fragment specific to this derived template:

protected override void SpecificFragment(int n)
{
#>
   Specific to DerivedTemplate1 : <#= n #>
<#+
}
#>

Uygulama kodu:

... 
DerivedTemplate1 t1 = new DerivedTemplate1();
string result = t1.TransformText();
Console.WriteLine(result);

Sonuç çıktısı:

Here is the description for this derived template:
  Description for this derived class

Here is the fragment specific to this derived template:
     Specific to DerivedTemplate1 : 42
End of common template.
End material for DerivedTemplate1.

İlgili Konular

Tasarım zamanı şablonları: kod üretmek için bir şablonu kullanmak istiyorsanız, uygulamanızın bir parçası olur, bkz: T4 metin şablonları kullanarak tasarım zamanı kod oluşturma.

Çalışma zamanı şablonları şablonları ve bunların içeriği derleme zamanında burada belirlenen herhangi bir uygulamada kullanılabilir.Ancak yazmak istiyorsanız, bir Visual Studio , çalışma anında değiştirmek için bkz: şablonlar metin üretir uzantısı Metin dönüştürme vs uzantısındaki çağırma.

Ayrıca bkz.

Kavramlar

Kod oluşturma ve T4 metin şablonları

T4 metin şablon yazma

Diğer Kaynaklar

Anlama T4: Metin şablonları Oleg Sych aðaçtaki