Depuração de um modelo de texto T4

Você pode definir pontos de interrupção em modelos de texto.Para criar um modelo em tempo de design de texto, escolha Modelo de depuração T4 no menu de atalho do arquivo de modelo de texto no solution Explorer.Para criar um modelo de texto em tempo de execução, simplesmente depurar o aplicativo ao qual ele pertence.

Para criar um modelo de texto, você deve compreender as etapas do processo de transformação do modelo.Os diferentes tipos de erros podem ocorrer em cada etapa.As etapas são.

Por Etapa

Modelo em tempo de design: quando acontecer

Modelo de tempo de execução: quando acontecer

O código é gerado do modelo de texto.

Erros nas diretivas, ou em marcas combinadas errado ou desorganizado de <#…#> .

Quando você salvar o modelo ou chamar a transformação de texto.

Quando você salvar o modelo ou chamar a transformação de texto.

O código gerado é criado.

Erros de compilação no código do modelo.

Logo após a etapa anterior.

Junto com seu código do aplicativo.

Blocos de código.

Erros em tempo de execução no código do modelo.

Logo após a etapa anterior.

Quando seu aplicativo é executado e chamar código de modelo.

Em a maioria dos casos, a linha números no código do modelo é fornecida no relatório de erros.Quando o relatório de erros se refere a um nome de arquivo temporário, a causa comum é um sinal combinado errado no código do modelo de texto.

Você pode definir pontos de interrupção em modelos de texto e para depurá-los da maneira habitual.

Erros comuns e correções

A tabela a seguir lista os erros mais comuns e seus correções.

mensagem de erro

Descrição

Solução

Falha ao carregar classes base {0}” de classe que herda de transformação.

Ocorre se você não conseguir localizar a classe base especificado no parâmetro de inherits em uma diretiva do modelo.A mensagem fornece o número da linha da política de modelo.

Certifique-se de que a classe especificada existe, e que existe no assembly que está especificado na diretiva do assembly.

não resolvem inclua o texto para o arquivo: {0}

Ocorre quando você não poderá localizar um modelo incluído.A mensagem fornece o nome do aplicativo inclui o arquivo.

Certifique-se de que o caminho do arquivo é relativo ao caminho original do modelo, ou que o arquivo está em um local que está registrado com o host, ou que há um caminho completo do arquivo.

Os erros foram gerados para inicializar o objeto de transformação.a transformação não será executada.

Ocorre quando 'Initialize()de falha " falso ou retornado da classe de transformação.

O código na função de Initialize() vem da classe base de transformação especificada na diretiva de <#@template#> e os processadores de diretiva.O erro que causou inicializa para falhar provavelmente está na lista de erro.Investigar falhou porque.Você pode examinar o código gerado real para Initialize() seguindo os procedimentos para criar um modelo.

O assembly “{0}” para o processador diretivo “{1}” não foi concedido a conjunto de permissões FullTrust.Somente são permitidos em conjuntos de confiança fornecer processadores de diretiva.este processador diretivo não será carregado.

Ocorre quando o sistema não conceder permissões FullTrust a um assembly que contém um processador de diretiva.A mensagem fornece o nome do assembly e o nome do processador de diretiva.

Certifique-se de usar apenas conjuntos de confiança no computador local.

O caminho “{0}” deve ser local para o computador ou parte de sua zona de confiança.

Ocorre quando uma diretiva ou na diretiva do assembly referenciarem um arquivo que não esteja em seu computador local ou na zona confiável da rede.

Certifique-se de que o diretório onde as políticas da diretiva ou assembly estão localizadas está em sua zona de confiança.Você pode adicionar um diretório de rede para sua zona de confiança com o Internet Explorer.

Vários erros de sintaxe como catch “token “invalidar”” ou “namespace não podem conter diretamente membros”

Muitos de fechamento chaves no código do modelo.O compilador é confusa ele com o código padrão de geração.

Verifique o número de fechar delimitadores de código de dentro de chaves e colchetes.

Loop ou condições não compilados ou não executado corretamente.Por exemplo:

<#if (i>10)#>
   Number is: <#= i #>.

Saída de esse código sempre o valor de Perdidas.Somente o número é “: ” é condicional.

Em C#, chaves de uso para colocar sempre blocos de texto que são inseridos em instruções de controle.

adicionar chaves:

<#if (i>10) { #>
   Number is: <#= i #>.
<# } #>

“Expressão demasiadamente complexa” ao processar um modelo em tempo de design ou ao criar um modelo em tempo de execução é preprocessada ().

paradas deVisual Studio que funcionam ao tentar inspecionar o código gerado por um modelo em tempo de execução.

O bloco texto é muito longo.T4 converte blocos de texto como uma expressão de concatenação de cadeia de caracteres, com uma cadeia de caracteres literal para cada linha do modelo.Blocos de texto muito demorada podem ultrapassar os limites do tamanho do compilador.

Dividir o bloco de texto com longo um bloco de expressão como:

<#= "" #>

Descrições e correções de aviso

A tabela a seguir lista os avisos mais comuns juntamente com correções, se disponível.

mensagem de aviso

Descrição

Solução

Carregando incluir arquivo “{0}” retornou um zero ou uma cadeia de caracteres vazia.

Ocorre se um arquivo de modelo incluído de texto está em branco.A mensagem fornece o nome do arquivo incluído.

Remova a diretiva incluir ou certifique-se de que o arquivo tem qualquer conteúdo.

Transformação de compilação:

Prepends essa cadeia de caracteres para todos os erros ou avisos que originam de compilador quando compila a transformação.Essa cadeia de caracteres significa que o compilador apresentou um erro ou aviso.

Se você tiver um problema que localiza o DLL, você talvez precise fornecer o caminho completo ou um nome forte totalmente qualificado se a DLL está no GAC.

O parâmetro “{0}” já existe na diretiva.o parâmetro duplicado será ignorado.

ocorre quando um parâmetro for especificado mais de uma vez em uma diretiva.A mensagem fornece o nome do parâmetro e número da linha da política.

Remova a especificação duplicada de parâmetro.

Ocorreu um erro ao carregar o arquivo incluir “{0}”.a diretiva incluir será ignorada.

Ocorre quando você não poderá localizar um arquivo especificado em uma política de include .A mensagem fornece o nome de arquivo e o número da linha da política.

Certifique-se de que o arquivo incluir existe no mesmo diretório que o arquivo de modelo de texto original ou em um dos diretórios incluir que são registrados com o host.

Uma classe base inválido foi especificado para a classe de transformação.A classe base deve derivar de Microsoft.VisualStudio.TextTemplating.TextTransformation.

Ocorre quando o parâmetro de inherits em uma política de modelo especificar uma classe que não herda de TextTransformation.A mensagem fornece o número da linha da política de modelo.

Especificar uma classe que deriva de TextTransformation.

Uma cultura inválido foi especificado na diretiva do modelo “”.A cultura deve estar no formato “xx-XX”.A cultura invariável será usada.

Ocorre quando o parâmetro culture em uma diretiva do modelo é especificado incorretamente.A mensagem fornece o número da linha da política de modelo.

Altere o parâmetro culture para uma cultura válida no formato “xx-XX”.

Um valor inválido de depuração “{0}” foi especificado na diretiva do modelo.O valor de depuração deve ser “true” ou “false”.A opção de “false” será usada.

Ocorre quando o parâmetro de debug em uma diretiva do modelo é especificado incorretamente.A mensagem fornece o número da linha da política de modelo.

Defina o parâmetro de depuração “true” ou “false”.

Um valor inválido de HostSpecific “{0}” foi especificado na diretiva do modelo.O valor de HostSpecific deve ser “true” ou “false”.A opção de “false” será usada.

Ocorre quando o parâmetro host específico em uma política de template é especificado incorretamente.A mensagem fornece o número da linha da política de modelo.

Defina o parâmetro host específico “true” ou “false”.

Um idioma válido “{0}” foi especificado na diretiva do modelo “”.o idioma deve ser “C#” ou “VB”.o valor padrão de “C#” será usado.

Ocorre quando um idioma sem suporte é especificado na diretiva de template .Somente “C#” ou “VB” são permitidas (sem diferenciação de maiúsculas e minúsculas).A mensagem fornece o número da linha da política de modelo.

Defina o parâmetro de language na diretiva de modelo a “A” ou " VB”.

Várias diretivas de saída foram encontradas no modelo.todos mas primeiro serão ignorados.

Ocorre quando várias diretivas de output são especificadas em um arquivo de modelo.A mensagem fornece o número da linha da política duplicado de saída.

Remova as políticas de output duplicados.

Várias diretivas de modelo foram encontradas no modelo.todos mas primeiro serão ignorados.Vários parâmetros para a diretiva de modelo devem ser especificados em uma diretiva do modelo.

Ocorre se você especificar várias diretivas de template em um arquivo de modelo de texto (incluindo arquivos incluídos).A mensagem fornece o número da linha da política duplicada de modelo.

Agregar as diretivas diferentes de template em uma política de template .

Nenhum processador foi especificado para uma diretiva chamada “{0}”.a diretiva será ignorada.

Ocorre se você especificar uma política de custom , mas não fornecem um atributo de processor .A mensagem fornece o nome da diretiva e número da linha.

Fornecer um atributo de processor com o nome do processador de directive para a diretiva.

Um processador chamado “{0}” não pôde ser encontrado para a diretiva chamada “{1}”.a diretiva será ignorada.

Ocorre quando o sistema não poderá localizar o processador de directive que você especificou em uma diretiva de custom .A mensagem fornece o nome da diretiva, o nome do processador, e o número da linha da política.

Defina o atributo na diretiva de processor ao nome do processador de diretiva.

Um parâmetro obrigatório “{0}” para o diretivo “{1}” não foi encontrado.a diretiva será ignorada.

Ocorre quando o sistema não fornecer um parâmetro diretivo necessário.A mensagem fornece o nome do parâmetro ausente, o nome da diretiva, e o número da linha.

Forneça o parâmetro ausente.

O processador chamado “{0}” não oferece suporte a diretiva chamada “{1}”.a diretiva será ignorada.

Ocorre quando um processador diretivo não suportam uma diretiva.A mensagem fornece o nome e número da linha da política de incorreto ficará juntamente com o nome do processador de diretiva.

Corrija o nome da diretiva.

A diretiva para incluir o arquivo “{0}” faz um loop infinito.

Se a circular inclui as diretivas exibidas são especificadas (por exemplo, Um arquivo inclui o arquivo B, que inclui o arquivo Para.)

não especificar a circular incluem diretivas.

transformação em execução:

Prepends essa cadeia de caracteres para todos os erros ou avisos que são gerados ao executar a transformação.

Não aplicável.

Um início ou uma marca de fim inesperada foi encontrado dentro de um bloco.Certifique-se de que você não tiver feito mis- um tipo início ou uma marca de fim, e que você não tem qualquer blocos aninhada no modelo.

Exibida quando você tem um <# ou um #> inesperado.Isto é, se você tiver um <# após outra marca aberta que não tenha sido fechada, ou você tem um #> quando não há nenhuma marca aberta sem fechar antes dela.A mensagem fornece o número da linha de marca combinada problema.

Remova o início ou a marca de fim combinada errado, ou usar um caractere de escape.

Uma diretiva foi especificada no formato incorreto.a diretiva será ignorada.Especificar qual a diretiva no formato <#@ name [parametername="parametervalue"]* #>

Exibido pelo analisador se uma diretiva não é especificada no formato correto.A mensagem fornece o número da linha da política incorreta.

Certifique-se de que todas as diretivas estão no formato <#@ name [parametername="parametervalue"]* #>.Para obter mais informações, consulte T4 Diretivas de modelo de texto.

Falha ao assembly “{0}” para o processador diretivo registrado “{1}”

{2}

Ocorre quando um processador diretivo não pode ser carregado pelo host.A mensagem identifica o assembly fornecido para o processador de diretiva e o nome do processador de diretiva.

Certifique-se de que o processador de diretiva é registrado corretamente e que o assembly existe.

Não encontrar o tipo “{0}” no assembly “{1}” para o processador diretivo registrado “{2}”

{3}

Ocorre quando um tipo da diretiva do processador não pode ser carregado do assembly.A mensagem fornece o nome do tipo, do assembly, e do processador de diretiva.

O vshost localiza informações diretiva do processador (nome, tipo, e assembly) no Registro.Certifique-se de que o processador de diretiva é registrado corretamente, e que o tipo existe no assembly.

Houve um problema ao carregar o assembly “{0}”

Ocorre quando há um problema ao carregar um assembly.A mensagem fornece o nome do assembly.

Você pode especificar os assemblies sejam carregados nas políticas de <@#assembly#>, e por processadores de diretiva.A mensagem de erro que segue esta cadeia de caracteres deve fornecer mais dados em como a carga do assembly falhou.

Houve um problema ao criar e inicializar o processador para uma diretiva chamado “{1}”.O tipo do processador é {0}.a diretiva será ignorada.

Ocorre quando o sistema não pôde criar ou inicializar um processador de diretiva.A mensagem fornece o nome e número da linha da política e o tipo do processador.

Certifique-se de usar o processador diretivo correto, e que o processador de diretiva tem um construtor público padrão.Se não, use as opções de depuração localizar porque o método de Initialize() do processador de diretivas estão falhando.Para obter mais informações, consulte Depuração de um modelo de texto T4.

Uma exceção foi lançada quando o processamento uma diretiva chamado “{0}”.

Ocorre quando um processador da diretiva lançar uma exceção quando processando uma diretiva.

Certifique-se de que os parâmetros para o processador de diretivas estão corretos.

O host apresentou uma exceção ao tentar resolver a referência de assembly “{0}”.

Ocorre quando o host lançar uma exceção quando tentar resolver uma referência de montagem.A mensagem fornece a cadeia de caracteres de referência do assembly.

As referências assembly vêm das políticas de <@#assembly#> e os processadores de diretiva.Certifique-se de que o parâmetro de “nome” fornecido no parâmetro do assembly está correto.

Tente especificar {1} o valor não suportado “{0}” para a diretiva {2}

Ocorre por RequiresProvidesDirectiveProcessor (todos nossos processadores de diretiva gerados derivam de ele), quando você fornece um sem suporte requer ou fornecer o argumento.

Certifique-se de que os nomes em pares de name='value fornecidos no e fornecem exigem parâmetros estão corretos.