Instruções passo a passo: depurando um modelo (template) de texto que acessa um modelo
Ao modificar ou adicionar modelos de texto em uma solução de linguagem específica do domínio, você poderá receber erros quando o mecanismo transformar o modelo no código-fonte ou quando ele compilar o código gerado. O passo a passo a seguir demonstra algumas das coisas que você pode fazer para depurar um modelo de texto.
Observação
Para obter mais informações sobre modelos de texto em geral, confira Geração de código e modelos de texto T4. Para obter mais informações sobre como depurar modelos de texto, confira Passo a passo: depurar um modelo de texto.
Criar uma solução de linguagem específica de domínio
Neste procedimento, você cria uma solução de linguagem específica de domínio que tenha as seguintes características:
Nome: DepuraçãoTestLanguage
Modelo de solução: linguagem mínima
Extensão de arquivo: .ddd
Nome da empresa: Fabrikam
Para obter mais informações sobre como criar uma solução de linguagem específica de domínio, confira Como criar uma solução de linguagem específica de domínio.
Criar um modelo de texto
Adicione um modelo de texto à sua solução.
Para criar um modelo de texto
Compile a solução e comece a executar no depurador. (No menu Compilar, clique em Recompilar Solução e, no menu Depurar, clique em Iniciar Depuração.) Uma nova instância do Visual Studio abre o projeto de Depuração.
Adicione um arquivo de texto chamado
DebugTest.tt
ao projeto de Depuração.Verifique se a propriedade Ferramenta Personalizada de DebugTest.tt está definida como
TextTemplatingFileGenerator
.
Diretivas de depuração que acessam um modelo de um modelo de texto
Antes de acessar um modelo das instruções e expressões em um modelo de texto, você deverá primeiro chamar um processador de diretiva gerado. Chamar o processador de diretiva gerado disponibiliza as classes em seu modelo para o código de modelo de texto como propriedades. Para obter mais informações, confira Acessar modelos de modelos de texto.
Nos procedimentos a seguir, você depurará um nome de diretiva incorreto e um nome de propriedade incorreto.
Para depurar um nome de diretiva incorreto
Substitua o código em DebugTest.tt pelo seguinte código:
Observação
O código contém um erro. Você está introduzindo o erro para depurá-lo.
<#@ template language="C#" inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation"#> <#@ output extension=".txt" #> <#@ modelRoot processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=ExampleModel" #> Model: <#= this.ExampleModel #> <# foreach (ExampleElement element in this.ExampleModel.Elements) { #> Element: <#= element.Name #> <# } #>
No Gerenciador de Soluções, clique com o botão direito do mouse em DebugTest.tt e clique em Executar Ferramenta Personalizada.
A janela Lista de Erros exibe este erro:
O processador chamado “DebuggingTestLanguageDirectiveProcessor” não dá suporte à diretiva chamada “modelRoot”. A transformação não será executada.
Nesse caso, a chamada de diretiva contém um nome de diretiva incorreto. Você especificou
modelRoot
como o nome da diretiva, mas o nome correto da diretiva éDebuggingTestLanguage
.Clique duas vezes no erro na janela Lista de Erros para ir para o código.
Para corrigir o código, altere o nome da diretiva para
DebuggingTestLanguage
.A alteração está realçada.
No Gerenciador de Soluções, clique com o botão direito do mouse em DebugTest.tt e clique em Executar Ferramenta Personalizada.
Agora, o sistema transforma o modelo de texto e gera o arquivo de saída correspondente. Você não verá erros na janela Lista de Erros.
Para depurar um nome de propriedade incorreto
Substitua o código em DebugTest.tt pelo seguinte código:
Observação
O código contém um erro. Você está introduzindo o erro para depurá-lo.
<#@ template language="C#" inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation"#> <#@ output extension=".txt" #> <#@ DebuggingTestLanguage processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=LibraryModel" #> Model: <#= this.ExampleModel #> <# foreach (ExampleElement element in this.ExampleModel.Elements) { #> Element: <#= element.Name #> <# } #>
No Gerenciador de Soluções, clique com o botão direito do mouse em DebugTest.tt e clique em Executar Ferramenta Personalizada.
A janela Lista de Erros é exibida e mostra um destes erros:
(C#)
Transformação de compilação: Microsoft.VisualStudio.TextTemplating<GUID>. “GeneratedTextTransformation” não contém uma definição para “ExampleModel”
(Visual Basic)
Transformação de compilação: “ExampleModel” não é membro do “Microsoft.VisualStudio.TextTemplating<GUID>.GeneratedTextTransformation”.
Nesse caso, o código do modelo de texto contém um nome de propriedade incorreto. Você especificou
ExampleModel
como o nome da propriedade, mas o nome correto da propriedade éLibraryModel
. Você pode encontrar o nome de propriedade correto no parâmetro provides, conforme mostrado no seguinte código:<#@ DebuggingTestLanguage processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=LibraryModel" #>
Clique duas vezes no erro na janela Lista de Erros para ir para o código.
Para corrigir o código, altere o nome da propriedade para
LibraryModel
no código do modelo de texto.As alterações são realçadas.
<#@ template language="C#" inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation"#> <#@ output extension=".txt" #> <#@ DebuggingTestLanguage processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=LibraryModel" #> Model: <#= this.LibraryModel #> <# foreach (ExampleElement element in this.LibraryModel.Elements) { #> Element: <#= element.Name #> <# } #>
No Gerenciador de Soluções, clique com o botão direito do mouse em DebugTest.tt e clique em Executar Ferramenta Personalizada.
Agora, o sistema transforma o modelo de texto e gera o arquivo de saída correspondente. Você não verá erros na janela Lista de Erros.