Compartilhar via


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:

Criar um modelo de texto

Adicione um modelo de texto à sua solução.

Para criar um modelo de texto

  1. 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.

  2. Adicione um arquivo de texto chamado DebugTest.tt ao projeto de Depuração.

  3. 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

  1. 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 #>
    <#
    }
    #>
    
  2. 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.

  3. Clique duas vezes no erro na janela Lista de Erros para ir para o código.

  4. Para corrigir o código, altere o nome da diretiva para DebuggingTestLanguage.

    A alteração está realçada.

    <#@ DebuggingTestLanguage processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=ExampleModel" #>
    
  5. 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

  1. 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 #>
    <#
    }
    #>
    
  2. 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" #>
    
  3. Clique duas vezes no erro na janela Lista de Erros para ir para o código.

  4. 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 #>
    <#
    }
    #>
    
  5. 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.