Udostępnij za pośrednictwem


Metody narzędziowe szablonu tekstu

Istnieje kilka metod, które są zawsze dostępne podczas pisania kodu w Visual Studio tekst szablonu.Metody te są zdefiniowane w TextTransformation.

PoradaPorada

Można również używać innych metod i usługi świadczone przez środowisko hosta w szablonie zwykły tekst (nieprzetworzony).Na przykład można rozpoznać ścieżki pliku, rejestrowanie błędów i uzyskać usługi świadczone przez Visual Studio i załadować dowolne pakiety.Aby uzyskać więcej informacji, zobacz Accessing Visual Studio from a Text Template.

Metod zapisu

Można użyć Write() i WriteLine() metod, aby dołączyć tekst wewnątrz bloku kodu standardowych, zamiast korzystać z bloku kodu wyrażenie.Następujące bloki kodu dwa są funkcjonalnie równoważne.

Bb126474.collapse_all(pl-pl,VS.110).gifBlok kodu z bloku wyrażenie

<#
int i = 10;
while (i-- > 0)
    { #>
        <#= i #>
    <# }
#>

Bb126474.collapse_all(pl-pl,VS.110).gifBlok kodu przy użyciu WriteLine()

<# 
    int i = 10;
    while (i-- > 0)
    { 
        WriteLine((i.ToString()));
    }
#>

Może znaleźć przydatne do korzystania z jednego z tych metod narzędzie zamiast bloku wyrażenie wewnątrz bloku kodu długie z zagnieżdżonych instrukcji sterujących.

Write() i WriteLine() metody mają dwa overloads, taką, która przyjmuje parametr będący pojedynczym ciągiem i który przyjmuje ciąg formatu kompozytowe plus tablicę obiektów, aby uwzględnić w ciągu (takich jak Console.WriteLine() metody).Następującego wykorzystania dwóch WriteLine() są funkcjonalnie równoważne:

<#
    string msg = "Say: {0}, {1}, {2}";
    string s1 = "hello";
    string s2 = "goodbye";
    string s3 = "farewell";
    
    WriteLine(msg, s1, s2, s3);
    WriteLine("Say: hello, goodbye, farewell");
#> 

Metody wcięcia

Do formatowania danych wyjściowych szablonu tekstu, można użyć metody wcięcia.TextTransformation Klasa ma CurrentIndent string właściwość, która pokazuje bieżące wcięcie tekstu szablonu i indentLengths to jest pole listy wcięcia, które zostały dodane.Można dodać wcięcia z PushIndent() metody i odjąć wcięcie z PopIndent() metody.Jeśli chcesz usunąć wszystkie wcięcia, użyj ClearIndent() metody.Następujący blok kodu pokazano sposób użycia tych metod:

<#
    WriteLine(CurrentIndent + "Hello");
    PushIndent("    ");
    WriteLine(CurrentIndent + "Hello");
    PushIndent("    ");
    WriteLine(CurrentIndent + "Hello");
    ClearIndent();
    WriteLine(CurrentIndent + "Hello");
    PushIndent("    ");
    WriteLine(CurrentIndent + "Hello");
#>

Ten blok kodu daje następujący wynik:

Hello
        Hello
                Hello
Hello
        Hello

Błąd i ostrzeżenie metody

Można użyć metody narzędziowe błędów i ostrzeżeń, wiadomości, aby dodać Visual Studio lista błędów.Na przykład poniższy kod będzie dodać komunikat o błędzie do listy błędów.

<#
  try
  {
    string str = null;
    Write(str.Length.ToString());
  }
  catch (Exception e)
  {
    Error(e.Message);
  }
#>  

Dostęp do hosta i dostawcy usług

Właściwość this.Host można zapewnić dostęp do właściwości udostępniane przez hosta, który jest wykonywany szablonu.Aby użyć this.Host, należy ustawić hostspecific atrybutu w <@template#> dyrektywę:

<#@template ... hostspecific="true" #>

Typ this.Host zależy od typu host, w którym wykonywane jest szablon.W szablonie, który jest uruchomiony w Visual Studio, można oddać this.Host do IServiceProvider celu uzyskania dostępu do usług, takich jak IDE.Na przykład:

EnvDTE.DTE dte = (EnvDTE.DTE) ((IServiceProvider) this.Host)
                       .GetService(typeof(EnvDTE.DTE));

Za pomocą różnych zestaw metod, narzędzie

Jako część procesu generowania tekstu, plik szablonu jest przekształcany w klasy, która zawsze o nazwie GeneratedTextTransformation i dziedziczy z TextTransformation.Jeśli chcesz użyć innego zestawu metod zamiast tego, można pisać własne klasy i określić go w dyrektywie szablonu.Musi dziedziczyć po klasie TextTransformation.

<#@ template inherits="MyUtilityClass" #>

Użyj assembly dyrektywy, aby odwołać się za montaż, gdzie można znaleźć skompilowaną klasę.