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.Host
metody , 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ę GeneratedTextTransformation
i 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ę.