Acessando Visual Studio ou outros Hosts a partir de um modelo de texto T4
Em um modelo de texto, você pode usar os métodos e propriedades expostas pelo host que executa o modelo, como Visual Studio.
Isso se aplica aos modelos de texto normal, os modelos de texto não pré-processado.
Como obter acesso ao host
Definir hostspecific="true" na template diretiva. Isso permite que você use this.Host, que tem o tipo de ITextTemplatingEngineHost. Esse tipo tem membros que você pode usar, por exemplo, para resolver nomes de arquivo e registro de erros.
Resolução de nomes de arquivo
Para localizar o caminho completo de um arquivo em relação ao modelo de texto, use esta opção.Host.ResolvePath().
<#@ template hostspecific="true" language="C#" #>
<#@ output extension=".txt" #>
<#@ import namespace="System.IO" #>
<#
// Find a path within the same project as the text template:
string myFile = File.ReadAllText(this.Host.ResolvePath("MyFile.txt"));
#>
Content of myFile is:
<#= myFile #>
Exibindo mensagens de erro
Este exemplo registra mensagens quando você transforma o modelo. Se o host for Visual Studio, eles são adicionados à janela de erro.
<#@ template hostspecific="true" language="C#" #>
<#@ output extension=".txt" #>
<#@ import namespace="System.CodeDom.Compiler" #>
<#
string message = "test message";
this.Host.LogErrors(new CompilerErrorCollection()
{ new CompilerError(
this.Host.TemplateFile, // Identify the source of the error.
0, 0, "0", // Line, column, error ID.
message) }); // Message displayed in error window.
#>
Usando a API de Visual Studio
Se estiver executando um modelo de texto em Visual Studio, você pode usar this.Host para acessar os serviços fornecidos por Visual Studio e quaisquer pacotes ou as extensões estão carregadas.
Definir hostspecific = "true" e reforço de this.Host para [T:System.IServiceProvider.]
Este exemplo obtém o Visual Studio API, DTE, como um serviço:
<#@ template hostspecific="true" language="C#" #>
<#@ output extension=".txt" #>
<#@ assembly name="EnvDTE" #>
<#@ import namespace="EnvDTE" #>
<#
IServiceProvider serviceProvider = (IServiceProvider)this.Host;
DTE dte = serviceProvider.GetService(typeof(DTE)) as DTE;
#>
Number of projects in this solution: <#= dte.Solution.Projects.Count #>
Histórico de alterações
Date |
History |
Motivo |
---|---|---|
Março de 2011 |
Tópico criado |
Comentários do cliente. |