Méthodes utilitaires de modèle de texte
Plusieurs méthodes sont toujours disponibles lorsque vous écrivez du code dans un modèle de texte Visual Studio. Ces méthodes sont définies dans TextTransformation.
Conseil
Vous pouvez également utiliser d’autres méthodes et services fournis par l’environnement hôte dans un modèle de texte standard (pas prétraité). Par exemple, vous pouvez résoudre les chemins d’accès aux fichiers, les erreurs de journal, et obtenir les services fournis par Visual Studio et tous les packages chargés. Pour plus d’informations, consultez Accès à Visual Studio à partir d’un modèle de texte.
Méthodes d’écriture
Vous pouvez utiliser les méthodes Write()
et WriteLine()
pour ajouter du texte à l’intérieur d’un bloc de code standard, au lieu d’utiliser un bloc de code d’expression. Les deux blocs de code suivants sont fonctionnellement équivalents.
Bloc de code avec un bloc d’expression
<#
int i = 10;
while (i-- > 0)
{ #>
<#= i #>
<# }
#>
Bloc de code à l’aide de WriteLine()
<#
int i = 10;
while (i-- > 0)
{
WriteLine((i.ToString()));
}
#>
Il peut être utile d’utiliser l’une de ces méthodes utilitaires au lieu d’un bloc d’expression à l’intérieur d’un bloc de code long avec des structures de contrôle imbriquées.
Les méthodes Write()
et WriteLine()
ont deux surcharges, l’une qui prend un seul paramètre de chaîne et l’autre qui prend une chaîne de format composite et un tableau d’objets à inclure dans la chaîne (comme la méthode Console.WriteLine()
). Les deux utilisations de WriteLine()
suivantes sont fonctionnellement équivalentes :
<#
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");
#>
Méthodes de mise en retrait
Vous pouvez utiliser des méthodes de mise en retrait pour mettre en forme la sortie de votre modèle de texte. La classe TextTransformation a une propriété de chaîne CurrentIndent
qui affiche la mise en retrait actuelle dans le modèle de texte et un champ indentLengths
qui est une liste des retraits ajoutés. Vous pouvez ajouter une mise en retrait avec la méthode PushIndent()
et soustraire une mise en retrait avec la méthode PopIndent()
. Si vous souhaitez supprimer toutes les mises en retrait, utilisez la méthode ClearIndent()
. Le bloc de code suivant montre l’utilisation de ces méthodes :
<#
WriteLine(CurrentIndent + "Hello");
PushIndent(" ");
WriteLine(CurrentIndent + "Hello");
PushIndent(" ");
WriteLine(CurrentIndent + "Hello");
ClearIndent();
WriteLine(CurrentIndent + "Hello");
PushIndent(" ");
WriteLine(CurrentIndent + "Hello");
#>
Ce code génère la sortie suivante :
Hello
Hello
Hello
Hello
Hello
Méthodes d’erreur et d’avertissement
Vous pouvez utiliser des méthodes utilitaires d’erreur et d’avertissement pour ajouter des messages à la liste d’erreurs Visual Studio. Par exemple, le code suivant ajoute un message d’erreur à la liste d’erreurs.
<#
try
{
string str = null;
Write(str.Length.ToString());
}
catch (Exception e)
{
Error(e.Message);
}
#>
Accès à l’hôte et au fournisseur de services
La propriété this.Host
peut fournir l’accès aux propriétés exposées par l’hôte qui exécute le modèle. Pour utiliser this.Host
, vous devez définir l’attribut hostspecific
dans la directive <@template#>
:
<#@template ... hostspecific="true" #>
Le type de this.Host
dépend du type d’hôte dans lequel le modèle s’exécute. Dans un modèle qui s’exécute dans Visual Studio, vous pouvez effectuer un cast this.Host
vers IServiceProvider
pour accéder à des services tels que l’IDE. Par exemple :
EnvDTE.DTE dte = (EnvDTE.DTE) ((IServiceProvider) this.Host)
.GetService(typeof(EnvDTE.DTE));
Utilisation d’un autre ensemble de méthodes utilitaires
Dans le cadre du processus de génération de texte, votre fichier de modèle est transformé en classe, qui est toujours nommée GeneratedTextTransformation
et hérite de TextTransformation. Si vous souhaitez utiliser un autre ensemble de méthodes, vous pouvez écrire votre propre classe et la spécifier dans la directive de modèle. Votre classe doit hériter de TextTransformation.
<#@ template inherits="MyUtilityClass" #>
Utilisez la directive assembly
pour référencer l’assembly où se trouve la classe compilée.