Udostępnij za pośrednictwem


Metody korzystania z szablonów tekstowych

Istnieje kilka metod, które są zawsze dostępne podczas pisania kodu w szablonie tekstowym programu Visual Studio. Te metody są definiowane w pliku TextTransformation.

Napiwek

Można również użyć innych metod i usług udostępnianych przez środowisko hosta w zwykłym (nieprocesowym) szablonie tekstowym. Można na przykład usuwać ścieżki plików, błędy dziennika i pobierać usługi udostępniane przez program Visual Studio i wszystkie załadowane pakiety. Aby uzyskać więcej informacji, zobacz Uzyskiwanie dostępu do programu Visual Studio z szablonu tekstowego.

Metody zapisu

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

Blok kodu z blokiem wyrażeń

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

Blok kodu przy użyciu metody WriteLine()

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

Warto użyć jednej z tych metod narzędziowych zamiast bloku wyrażeń wewnątrz długiego bloku kodu ze zagnieżdżonym strukturami sterującymi.

Metody Write() i WriteLine() mają dwa przeciążenia, jeden, który przyjmuje jeden parametr ciągu i jeden, który przyjmuje ciąg formatu złożonego oraz tablicę obiektów do uwzględnienia w ciągu (na przykład Console.WriteLine() metody). Następujące dwa zastosowania 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

Metody wcięcia umożliwiają formatowanie danych wyjściowych szablonu tekstowego. Klasa TextTransformation ma CurrentIndent właściwość ciągu, która pokazuje bieżące wcięcie w szablonie tekstowym i indentLengths pole, które jest listą dodanych wcięcia. Możesz dodać wcięcie z PushIndent() metodą i odjąć wcięcie za pomocą PopIndent() metody . Jeśli chcesz usunąć wszystkie wcięcia, użyj ClearIndent() metody . Poniższy blok kodu przedstawia użycie tych metod:

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

Ten blok kodu generuje następujące dane wyjściowe:

Hello
        Hello
                Hello
Hello
        Hello

Metody błędów i ostrzeżeń

Możesz użyć metod narzędzi błędów i ostrzeżeń, aby dodać komunikaty do listy błędów programu Visual Studio. Na przykład poniższy kod 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że zapewnić dostęp do właściwości uwidocznionych przez hosta wykonującego szablon. Aby użyć this.Hostmetody , należy ustawić hostspecific atrybut w <@template#> dyrektywie:

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

Typ elementu this.Host zależy od typu hosta, w którym jest wykonywany szablon. W szablonie uruchomionym w programie Visual Studio można rzutować this.Host , aby IServiceProvider uzyskać dostęp do usług, takich jak środowisko IDE. Na przykład:

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

Używanie innego zestawu metod narzędziowych

W ramach procesu generowania tekstu plik szablonu jest przekształcany w klasę, która zawsze nosi nazwę GeneratedTextTransformationi dziedziczy z TextTransformationklasy . Jeśli zamiast tego chcesz użyć innego zestawu metod, możesz napisać własną klasę i określić ją w dyrektywie szablonu. Klasa musi dziedziczyć z TextTransformationklasy .

<#@ template inherits="MyUtilityClass" #>

assembly Użyj dyrektywy , aby odwołać się do zestawu, w którym można znaleźć skompilowany klasę.