Freigeben über


Hilfsprogrammmethoden für Textvorlagen

Es gibt mehrere Methoden, die Ihnen immer zur Verfügung stehen, wenn Sie Code in einer Visual Studio-Textvorlage schreiben. Diese Methoden sind in TextTransformation definiert.

Tipp

Sie können auch andere Methoden und Dienste verwenden, die von der Hostumgebung in einer regulären (nicht vorverarbeiteten) Textvorlage bereitgestellt werden. Beispielsweise können Sie Dateipfade auflösen, Fehler protokollieren und Dienste abrufen, die von Visual Studio und den geladenen Paketen bereitgestellt werden. Weitere Informationen finden Sie unter Zugreifen auf Visual Studio über eine Textvorlage.

Schreibmethoden

Sie können die Write()- und WriteLine()-Methoden verwenden, um Text in einem Standardcodeblock anzufügen, anstatt einen Ausdruckscodeblock zu verwenden. Die folgenden beiden Codeblöcke sind funktional äquivalent.

Codeblock mit einem Ausdrucksblock

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

Codeblock mit WriteLine()

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

Möglicherweise ist es hilfreich, eine dieser Hilfsprogrammmethoden anstelle eines Ausdrucksblocks in einem langen Codeblock mit geschachtelten Steuerungsstrukturen zu verwenden.

Die Write()- und WriteLine()-Methoden verfügen über zwei Überladungen: eine Überladung, die einen einzelnen Zeichenfolgenparameter annimmt, und eine Überladung, die eine zusammengesetzte Formatzeichenfolge sowie ein Array von Objekten verwendet, die in die Zeichenfolge eingebunden werden sollen (wie die Console.WriteLine()-Methode). Die beiden folgenden Verwendungsmöglichkeiten von WriteLine() sind funktional gleichwertig:

<#
    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");
#>

Einzugsmethoden

Sie können Einzugsmethoden verwenden, um die Ausgabe Ihrer Textvorlage zu formatieren. Die TextTransformation-Klasse verfügt über eine CurrentIndent-Zeichenfolgeneigenschaft, die den aktuellen Einzug in der Textvorlage anzeigt, und ein indentLengths-Feld, das eine Liste der hinzugefügten Einzüge darstellt. Sie können einen Einzug mit der PushIndent()-Methode hinzufügen und einen Einzug mit der PopIndent()-Methode subtrahieren. Wenn Sie alle Einzüge entfernen möchten, verwenden Sie die ClearIndent()-Methode. Der folgende Codeblock zeigt die Verwendung dieser Methoden:

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

Dieser Codeblock generiert die folgende Ausgabe:

Hello
        Hello
                Hello
Hello
        Hello

Fehler- und Warnungsmethoden

Sie können Fehler- und Warnungs-Hilfsprogrammmethoden verwenden, um der Visual Studio-Fehlerliste Meldungen hinzuzufügen. Mit dem folgenden Code wird der Fehlerliste beispielsweise eine Fehlermeldung hinzugefügt.

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

Zugreifen auf Host und Dienstanbieter

Die this.Host-Eigenschaft kann Zugriff auf Eigenschaften bereitstellen, die vom Host verfügbar gemacht werden, der die Vorlage ausführt. Um this.Host zu verwenden, müssen Sie das hostspecific-Attribut in der <@template#>-Anweisung festlegen:

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

Der Typ von this.Host hängt vom Typ des Hosts ab, auf dem die Vorlage ausgeführt wird. In einer Vorlage, die in Visual Studio ausgeführt wird, können Sie this.Host in IServiceProvider umwandeln, um Zugriff auf Dienste wie die IDE zu erhalten. Beispiel:

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

Verwenden eines anderen Satzes von Hilfsmethoden

Im Rahmen des Textgenerierungsprozesses wird die Vorlagendatei in eine Klasse umgewandelt, die immer benannt GeneratedTextTransformation wird und von TextTransformationder geerbt wird. Wenn Sie stattdessen einen anderen Satz von Methoden verwenden möchten, können Sie Ihre eigene Klasse schreiben und in der Vorlagenanweisung angeben. Ihre Klasse muss von TextTransformation erben.

<#@ template inherits="MyUtilityClass" #>

Verwenden Sie die assembly-Anweisung, um auf die Assembly zu verweisen, in der sich die kompilierte Klasse befindet.