Udostępnij za pośrednictwem


T4 Dyrektywy szablonu

A Visual Studio T4 tekst szablonu rozpoczyna się zwykle z template dyrektywy, która określa sposób przetwarzania szablon.Powinien to być nie więcej niż jedną dyrektywą szablonu w szablonie tekst i wszystkie pliki, które zawiera.

Ogólny przegląd pisanie tekstu szablonów, zobacz Zapisywanie szablonu tekst T4.

Za pomocą dyrektywy szablonu

<#@ template [language="VB"] [compilerOptions="options"] [culture="code"] [debug="true"] [hostspecific="true"] [inherits="templateBaseClass"] [visibility="internal"] [linePragmas="false"] #>

template Dyrektywy ma kilka atrybutów, które pozwalają określić różne aspekty transformacji.Wszystkie atrybuty są opcjonalne.

Atrybut compilerOptions

Te opcje są stosowane, gdy szablon został przekształcony w Visual C# lub Visual Basic, i jest skompilowany kod wynikowy.

Atrybut kultury

  • Przykład:
    culture="de-CH"

  • Prawidłowe wartości:
    "", niezmienna kultura, które jest ustawieniem domyślnym.

    Kultury, wyrażone jako ciąg w postaci xx-XX.Na przykład en US, ja-JP, de-CH, de-DE.Aby uzyskać więcej informacji, zobacz System.Globalization.CultureInfo.

Atrybut kultury określa kulturę podczas bloku wyrażenie jest konwertowana na tekst.

Atrybut debugowania

  • Przykład:

    debug="true"
    
  • Prawidłowe wartości:
    true, false.Domyślnym jest wartość false.

Jeśli debug atrybut jest true, pośredni kod będzie zawierał informacje, które włącza debuger do identyfikowania dokładniej pozycji w szablonie miejsce wystąpienia przerwy lub wyjątek.

Projektowania szablonów plik pośredni kod zostanie zapisany do katalogu % TEMP %.

Aby uruchomić debugera szablonu projektowania, otwórz menu skrótów tekstu szablonu w oknie Solution Explorer i wybierz polecenie Debugowania szablon T4.

Atrybut hostspecific

  • Przykład:

    hostspecific="true"
    
  • Prawidłowe wartości:
    true, false, trueFromBase.Domyślnym jest wartość false.

Jeśli wartość tego atrybutu dla true, właściwość o nazwie Host jest dodawana do klasy generowane przez szablon tekstu.Właściwość jest odwołaniem do hosta silnika transformacji i jest zadeklarowana jako Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost.Jeśli zostały zdefiniowane niestandardowe hosta, może to rzutować typu niestandardowego hosta.

Ponieważ typ tej właściwości zależy od typu host, jest tylko przydatne podczas pisania szablon tekst, który działa tylko z określonego hosta.

Gdy hostspecific jest true i za pomocą Visual Studio, można rzutować this.Host do IServiceProvider dostęp do Visual Studio funkcji.Można również użyć Host.ResolvePath(filename) uzyskać ścieżkę bezwzględną pliku projektu.Na przykład:

<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ output extension=".txt" #>
<#@ assembly name="EnvDTE" #>
<#@ import namespace="EnvDTE" #>
<#@ import namespace="System.IO" #>
<# // Get the Visual Studio API as a service:
 DTE dte = ((IServiceProvider)this.Host).GetCOMService(typeof(DTE)) as DTE;  
#>
Number of projects in this solution: <#=  dte.Solution.Projects.Count #>

<#
 // Find a path within the current project:
 string myFile = File.ReadAllText(this.Host.ResolvePath("MyFile.txt"));
#>
Content of myFile is:
<#= myFile #>

Jeśli korzystasz z inherits i hostspecific atrybuty wspólnie określić hosta = "trueFromBase" w klasie pochodnej i host = "true" w klasie podstawowej.Pozwala to uniknąć podwójnego definicja Host właściwość w wygenerowanym kodzie.

Atrybut Language

  • Przykład:
    language="VB"

  • Prawidłowe wartości:
    C#(domyślnie)

    VB

Atrybut language określa język (Visual Basic lub Visual C#) na potrzeby kodu źródłowego w bloki instrukcji i wyrażenie.Pliku kodu pośredniego, z którego jest generowane dane wyjściowe będą używać tego języka.Język ten nie jest powiązany język generuje szablonu, w którym może być dowolny rodzaj tekstu.

Na przykład:

<#@ template language="VB" #>
<#@ output extension=".txt" #>
Squares of numbers:
<#
  Dim number As Integer
  For number = 1 To 4
#>
  Square of <#= number #> is <#= number * number #>
<#
  Next number
#>

dziedziczy atrybut

Można określić, że kod programu szablonu może dziedziczyć z innej klasy, które również mogą być generowane z szablonu.

Gg586945.collapse_all(pl-pl,VS.110).gifDziedziczenie w run-time (wstępnie) szablonu

Można użyć dziedziczenie między szablonami tekst w czasie wykonywania, aby utworzyć podstawowy szablon, który ma kilka wariantów pochodnych.Szablony wykonania są te, które mają Niestandardowego narzędzia właściwość zestaw do TextTemplatingFilePreprocessor.Szablon wykonywania generuje kod, który można zadzwonić w aplikacji, aby utworzyć tekst zdefiniowany w szablonie.Aby uzyskać więcej informacji, zobacz Generowanie tekstu Run-Time z szablonami tekst T4.

Jeśli nie określisz inherits atrybut, klasą i klasy pochodne są generowane na podstawie szablonu tekstu.Po określeniu inherits jest generowany atrybut, tylko w klasie pochodnej.Klasa podstawowa można napisać ręcznie, ale musi przedstawić metody, które są używane w klasie pochodnej.

Więcej zazwyczaj określenia innego szablonu wstępnie jako klasa podstawowa.Podstawowy szablon zawiera typowe bloki tekstu, który może być z przeplotem z tekstu z pochodnych szablony.Można użyć klasy bloki funkcji <#+ ... #> do zdefiniowania metody, które zawierają fragmenty tekstu.Na przykład można umieścić ramach tekstu wyjściowego w szablonie bazowym, zapewniając wirtualny metody, które może być zastąpiona w szablonach pochodnych:

  • Szablon Run-time (wstępnie) tekst BaseTemplate.tt:

    This is the common header.
    <# 
      SpecificFragment1(); 
    #>
    A common central text.
    <# 
      SpecificFragment2(); 
    #>
    This is the common footer.
    <#+ 
      // Declare abstract methods
      protected virtual void SpecificFragment1() { }
      protected virtual void SpecificFragment2() { }
    #>
    
  • Szablon Run-time (wstępnie) tekst DerivedTemplate1.tt:

    <#@ template language="C#" inherits="BaseTemplate" #>
    <# 
      // Run the base template:
      base.TransformText();
    #>
    <#+
    // Provide fragments specific to this derived template:
    protected override void SpecificFragment1()
    {
    #>
       Fragment 1 for DerivedTemplate1
    <#+
    }
    protected override void SpecificFragment2()
    {
    #>
       Fragment 2 for DerivedTemplate1
    <#+
    }
    #>
    
  • Kod aplikacji, aby wywołać DerivedTemplate1:

    Console.WriteLine(new DerivedTemplate().TransformText());
    
  • Dane wyjściowe:

    This is the common header.
       Fragment 1 for DerivedTemplate1
    A common central text.
       Fragment 2 for DerivedTemplate1
    This is the common footer.
    

Można utworzyć klasy podstawowej i pochodnych w różnych projektach.Pamiętaj dodać bazowy projektu lub zestawu do odwołania projektu pochodnej.

Umożliwia także zwykłym klasy odręcznie jako klasa podstawowa.Klasy podstawowej należy podać metody stosowane w klasie pochodnej.

Informacje dotyczące przestrogiPrzestroga

Jeśli korzystasz z inherits i hostspecific atrybuty wspólnie określić hostspecific = "trueFromBase" w klasie pochodnej i host = "true" w klasie podstawowej.Pozwala to uniknąć podwójnego definicja Host właściwość w wygenerowanym kodzie.

Gg586945.collapse_all(pl-pl,VS.110).gifDziedziczenie w szablonu projektowania

Szablonu projektowania jest plik, dla którego Niestandardowego narzędzia jest ustawiona na TextTemplatingFileGenerator.W szablonie zostanie wygenerowany plik wyjściowy kodu lub tekstu, która stanowi część swojej Visual Studio projektu.Do generowania pliku wyjściowego, szablonu najpierw jest tłumaczona na pliku kodu pośredniego program, który zwykle nie widać.inherits Atrybut określa klasa podstawowa dla tego kodu pośredniego.

Do projektowania szablonu, można określić klasy podstawowej, pochodzącej z Microsoft.VisualStudio.TextTemplating.TextTransformation.Użycie <#@assembly#> dyrektywy załadować zestawu lub projektu, który zawiera klasy podstawowej.

Aby uzyskać więcej informacji, zobacz "dziedziczenia w tekst szablony" w blogu Gareth Jones.

Atrybut LinePragmas

  • Przykład:
    linePragmas="false"

  • Prawidłowe wartości:
    true(domyślnie)

    false

Ustawienie tego atrybutu na false powoduje usunięcie znaczników, które identyfikują swoje numery linii w wygenerowanym kodzie.Oznacza to, że kompilator zgłosi błędy za pomocą numerów wierszy wygenerowanego kodu.Daje to więcej opcji debugowania, jak można wybrać do debugowania tekst szablonu lub wygenerowany kod.

Atrybut ten może także pomóc, jeśli masz absolutną nazwy plików w pragmy są przyczyną rozpraszać scalenia kontroli kodu źródłowego.

Atrybut Widoczność

  • Przykład:
    visibility="internal"

  • Prawidłowe wartości:
    public(domyślnie)

    internal

W szablonie runtime to ustawia atrybut Widoczność wygenerowanej klasy.Domyślnie, klasa jest częścią publicznej API kodu, ale przez ustawienie visibility="internal" można się upewnić, że tylko kodu można użyć klasy generowania tekstu.