Depurando um modelo de texto T4
Você pode definir pontos de interrupção em modelos de texto. Para depurar um modelo em tempo de design de texto, salve o arquivo de modelo de texto, e escolha Depurar modelo T4 no menu de atalho do arquivo no Solution Explorer. Para depurar um modelo de texto de tempo de execução, depurar apenas o aplicativo que pertence.
Para depurar 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.
Etapa |
Modelo tempo de design: quando acontecer |
Modelo de tempo de execução: quando acontecer |
---|---|---|
O código é gerado do modelo de texto. Erros nas políticas, 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 seu código de modelo. |
Imediatamente 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. |
Imediatamente após a etapa anterior. |
Quando seu aplicativo executar e chamar código de modelo. |
Na maioria dos casos, a linha números no código de modelo é fornecida no relatório de erro. Quando o relatório de erro 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 as 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 especificada 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 o assembly que existe dentro é especificado em uma diretiva do assembly. |
Não resolvem inclua o texto para o arquivo: {0} |
Ocorre quando você não pode 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 é registrado com o host, ou que há um caminho completo do arquivo. |
Erros foram gerados para inicializar o objeto de transformação. A transformação não será executada. |
Ocorrer 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 política> de #@template# e os processadores de diretiva. O erro que causou inicializa para falhar provavelmente está na lista de erros. Investigar porque falhou. 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 aos conjuntos de confiança fornecer processadores de diretiva. Este processador diretivo não será carregado. |
Ocorre quando o sistema não de conceder permissões FullTrust a um assembly que contém um processador externo. A mensagem fornece o nome do assembly e o nome do processador externo. |
Certifique-se de que você usa 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 política ou a política de 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 de política 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” |
Chaves de fechamento demais no seu código de 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 executam corretamente. Por exemplo:
Saída desse código sempre o valor de I. 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:
|
“Expressão demasiadamente complexa” ao processar um modelo em tempo de design ou ao criar um modelo de tempo de execução (é preprocessada). paradas deVisual Studio que funcionam ao tentar inspecionar o código gerado por um modelo de 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 um literal de cadeia de caracteres para cada linha do modelo. Blocos de texto muito longos podem ultrapassar os limites de tamanho do compilador. |
Dividir o bloco texto longo com um bloco de expressão como: <#= "" #> |
Descrições e correções de aviso
A tabela a seguir lista os avisos mais comuns junto 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 a todos os erros ou avisos que originam de compilador compila quando a transformação. Essa cadeia de caracteres significa que o compilador apresentou um erro ou um aviso. |
Se você tiver um problema que localiza o DLL, você talvez precise fornecer o caminho completo ou um nome 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 política. 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 pode 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 diretiva 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 “modelo”. A cultura deve estar no formato “xx-XX”. A cultura invariável será usada. |
Ocorre quando o parâmetro cultura em uma política de 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 de 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 for 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 “modelo”. O idioma deve ser “C#” ou “VB”. O valor padrão de “C#” será usado. |
Ocorre quando um idioma sem suporte for especificado na diretiva @ template . Somente “C#” ou “VB” são permitidos (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 política de modelo “C#” 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 política 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. |
Agregados 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 política 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 pode localizar o processador de directive você especificou em uma diretiva de custom . A mensagem fornece o nome de diretiva, o nome do processador, e o número da linha da política. |
Defina o atributo de processor na diretiva para o nome do processador externo. |
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 de 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 suportar uma política. A mensagem fornece o nome e número da linha da política de incorreto ficará juntamente com o nome do processador externo. |
Corrija o nome da política. |
A diretiva para incluir o arquivo “{0}” faz um loop infinito. |
Se a circular inclui as diretivas exibidas são especificadas (por exemplo, O arquivo inclui o arquivo B, que inclui o arquivo). |
Não especifique a circular incluem diretivas. |
Transformação em execução: |
Prepends essa cadeia de caracteres a 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 foram encontrados 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 inesperado <ou # #>. Isto é, se você tem a <# após outra marca aberta que não é fechada, ou você tem a #> quando não há nenhuma marca aberta unclosed antes delas. A mensagem fornece o número da linha de marca combinada errado. |
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 nome <do #@ de formato [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 nome de #@ do formulário <[parametername= " parametervalue] *” #>. Para obter mais informações, consulte Diretivas de modelo de texto T4. |
Não carrega o 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 diretivo e o nome do processador externo. |
Certifique-se de que o processador diretivo é registrado corretamente e que o assembly existe. |
Não localize o tipo “{0}” no assembly “{1}” para o processador diretivo registrado “{2}” {3} |
Ocorre quando um tipo diretiva do processador não pode ser carregado do assembly. A mensagem fornece o nome de tipo, do assembly, e o processador externo. |
O vshost localiza informações diretiva do processador (nome, tipo, e assembly) no Registro. Certifique-se de que o processador diretivo é 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 <em políticas> de @#assembly#, e por processadores de diretiva. A mensagem de erro que segue esta cadeia de caracteres deve fornecer mais dados em porque a carga do assembly falhou. |
Houve um problema que cria e inicializar o processador para uma diretiva chamado “{1}”. O tipo do processador é {0}. A diretiva será ignorada. |
Ocorre quando o sistema não pode criar inicializar um processador externo. 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 diretivo 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 diretivo está falhando. Para obter mais informações, consulte Depurando um modelo de texto T4. |
Uma exceção foi lançada quando processar uma diretiva chamado “{0}”. |
Ocorre quando um processador de política lançar uma exceção quando processando uma política. |
Certifique-se de que os parâmetros para o processador diretivo 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 “nome” fornecido no parâmetro de 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 deles), quando você fornece um sem suporte requer ou fornecer o argumento. |
Certifique-se de que os nomes em pares de name='value fornecidos em exigem e fornecem parâmetros estão corretos. |