Compartilhar via


Demonstra Passo a passo: Depuração de um modelo de texto

Antes de você poder depurar um modelo de texto, você deve compreender as duas etapas do processo de transformação de modelo. Classes diferentes de erros podem ocorrer dentro de cada etapa. As etapas são como segue.

  1. O mecanismo de transformação do modelo de texto cria uma classe que é chamada de gerado classe transformation. Para criar a classe de transformação de gerado, o mecanismo de transformação do modelo de texto deve ser capaz de analisar o modelo de texto.

    Nesta etapa, erros no modelo de texto, como marcas incorretas podem impedir que ele sendo analisados. São relatados erros com o número de linha de modelo de texto correto.

  2. O mecanismo compila a classe de transformação gerada.

    Nesta etapa, erros de código podem impedir que a classe de transformação gerado compilação. A maioria dos erros são relatados com o número de linha de modelo de texto correto. Colchetes incompatíveis no código de modelo podem causar erros que fazem referência à classe transformado, que tem um nome de arquivo temporário.

  3. A classe de transformação compilado é executada para produzir a saída.

    Erros neste estágio não são relatados com um número de linha correta. Você pode percorrer a execução do código do modelo, mas você deve iniciar o depurador explicitamente, conforme descrito na seção seguinte.

Para depurar um modelo de texto, você deve primeiro corrigir erros no modelo de texto. Em seguida, você deve corrigir erros na classe transformation gerado.

ObservaçãoObservação

Quando você transforma um modelo de texto, você pode obter erros de qualquer uma das três origens: o modelo de texto, a classe de transformação gerado e quaisquer diretivas que chamar a partir de dentro do modelo de texto. Esta explicação passo a passo você irá depurar erros no modelo de texto e a classe de transformação gerada. No entanto, você também pode usar esses procedimentos para depurar diretivas personalizadas.

Tarefas ilustradas nesta explicação passo a passo incluem o seguinte:

  • Uma marca de modelo de texto incorreto de depuração.

  • Percorrendo o código do modelo

Criando um modelo de texto

Criar um projeto de aplicativo de console C# e adicionar um modelo de texto à sua solução. Você irá depurar esse modelo de texto em etapas posteriores.

Para criar um modelo de texto

  1. Na Visual Studio, crie um novo aplicativo de console em C# e o nome DebugTemplate.

  2. Adicionar um arquivo de modelo de texto chamado DebugTest.tt para o projeto DebugTemplate.

  3. Certifique-se de que o Ferramenta personalizada de DebugTest.tt for definida como TextTemplatingFileGenerator.

  4. Edite o arquivo para conter a seguinte linha:

    <#@ output extension=".txt" #> 
    
  5. Salve o arquivo.

    O sistema transforma o modelo de texto e gera o arquivo de saída correspondente. O novo arquivo aparece na Solution Explorer sob o arquivo de modelo de texto.

Uma marca de modelo de texto incorreto de depuração.

Um erro de sintaxe comum ao escrever modelos de texto é usar uma marca de início ou fim incorreta. Neste procedimento, você irá depurar uma marca incorreta.

Para depurar uma marca de modelo de texto incorreto

  1. Adicione o seguinte código para DebugTest.tt:

    ObservaçãoObservação

    O código contém um erro. Apresentando o erro intencionalmente para depurá-lo.

    <# for (int i = 0; i < 3; i++) { >
    Hello, World!
    <# } #>
    
  2. Salve o arquivo.

    O Error List janela aparece e exibe este erro:

    Uma marca de início ou fim inesperada foi encontrada dentro de um bloco. Certifique-se de que você não digitou incorretamente uma marca de início ou fim e não tem blocos aninhados no modelo.

    Nesse caso, o erro no código é uma marca de fim incorreto. O # no final, a marca está faltando.

  3. Clique duas vezes o erro de Error List janela para saltar para o código.

  4. Para corrigir o código, adicione a # a marca de fim.

    <# for (int i = 0; i < 3; i++) { #>
    
  5. Salve o arquivo.

    Agora o sistema transforma o modelo de texto e gera o arquivo de saída correspondente. Não existem erros no Error List janela.

Percorrendo o código do modelo

Para depurar o código do modelo, você precisa adicionar duas coisas no modelo:

  • <@#template debug="true" #>

  • System.Diagnostics.Debugger.Launch();

No procedimento a seguir, você irá depurar um índice de elemento que não existe. Este erro é semelhante aos erros dos procedimentos anteriores. No entanto, esse tempo você irá depurá-la usando o Visual Studio depurador.

Para depurar usando o depurador

  1. Crie uma pasta C:\nonsense e salve um arquivo de texto vazio chamado nonsense.xml para essa pasta.

  2. Substitua o código de DebugTest.tt com o seguinte código:

    ObservaçãoObservação

    O código contém um erro. Apresentando o erro intencionalmente para depurá-lo.

    <#@ output extension=".txt" #>
    <#@ assembly name="System.Xml.dll" #>
    <#@ import namespace="System.Xml" #>
    <#
    XmlDocument xDoc = new XmlDocument();
       xDoc.Load(@"C:\nonsense\nonsense.xml");
       XmlAttributeCollection attributes = xDoc.Attributes;
       if (attributes != null)
       {
          foreach (XmlAttribute attr in attributes)
          { #>
           <#=  attr.Name #>
       <# }
       }
       #>
    
  3. Salve o arquivo.

    O Error List janela aparece e exibe o seguinte erro:

    Executando transformação: System.XML.XmlException: Está faltando o elemento raiz.

  4. Adicionar um template diretiva com o debug parâmetro definido como true:

    <#@ template debug="true" #>
    
  5. Adicionar um System.Diagnostics.Debugger.Launch() instrução para o código de modelo de texto.

    O código ficará semelhante ao seguinte:

    <#@ template debug="true" #>
    <#@ output extension=".txt" #>
    <#@ assembly name="System.Xml.dll" #>
    <#@ import namespace="System.Xml" #>
    <#
       XmlDocument xDoc = new XmlDocument();
       System.Diagnostics.Debugger.Launch();
       xDoc.Load(@"C:\nonsense\nonsense.xml");
       XmlAttributeCollection attributes = xDoc.Attributes;
       if (attributes != null)
       { 
          foreach (XmlAttribute attr in attributes)
          { #>
           <#=  attr.Name #>
       <# }
       }
     #> 
    
  6. Execute novamente a transformação.

    O Visual Studio depurador de Just caixa de diálogo aparece.

  7. No Possible Debuggers lista, clique em nova instância de 2010 de Visual Studioe em seguida, clique em Sim.

    DebugTest.tt abre em uma nova instância de Visual Studio. 

  8. Depurar o código para a linha:

    xDoc.Load(@"C:\nonsense\nonsense.xml");
    
  9. O erro será gerado nesta linha.

  10. Feche a segunda instância de Visual Studio.

    1. Sobre o Debug menu, clique em Stop Debugging.

    2. Sobre o arquivo menu, clique em Sair.

    3. Quando for solicitado a salvar as alterações à solução, clique em não.

      A segunda instância de Visual Studio fecha.

  11. Corrigir o modelo de texto e remover os recursos de depuração.

    1. Em Solution Explorer, clique duas vezes em DebugTest.tt para abri-lo no editor.

    2. Corrija o nome de arquivo incorreto. Por exemplo, substituí-lo:

      @"C:\\Program Files\\Microsoft Visual Studio 10.0\\Xml\\SnippetsIndex.xml"

    3. Remover o templata diretiva de e e linha de quebra.

      O modelo de texto deve ter esta aparência:

      <#@ output extension=".txt" #>
      <#@ assembly name="System.Xml.dll" #>
      <#@ import namespace="System.Xml" #>
      <#
          XmlDocument xDoc = new XmlDocument();
          xDoc.Load(@"C:\Program Files\Microsoft Visual Studio 10.0\Xml\SnippetsIndex.xml");
          foreach (XmlNode node in xDoc.SelectNodes("//*"))
          {  #>
             <#= node.Name #>
         <#  }
      #>
      

Salve o DebugTest.tt. Verifique se há sem erros e que o arquivo. txt resultante lista os nomes de nó no arquivo XML.

Consulte também

Referência

Erros e avisos durante o uso de modelos de texto comuns