Compartir vía


Depuración de errores de una plantilla de texto T4

Puede establecer puntos de interrupción en plantillas de texto. Para depurar una plantilla de texto en tiempo de diseño, guarde el archivo de plantilla de texto y elija Depurar plantilla T4 en el menú contextual del archivo en el Explorador de soluciones. Para depurar una plantilla de texto en tiempo de ejecución, simplemente depure la aplicación a la que pertenece.

Para depurar una plantilla de texto, debe comprender los pasos del proceso de transformación de plantillas. Se pueden producir diferentes tipos de errores dentro de cada paso. Los pasos son los siguientes.

Step Plantilla en tiempo de diseño: cuándo ocurre Plantilla de ejecución: cuando ocurre
El código se genera a partir de la plantilla de texto.

Errores en directivas o etiquetas desordenadas o no coincidentes <#...#> .
Al guardar la plantilla o invocar la transformación de texto. Al guardar la plantilla o invocar la transformación de texto.
El código generado se compila.

Errores de compilación en el código de plantilla.
Inmediatamente después del paso anterior. Junto con el código de la aplicación.
Se ejecuta código.

Errores en tiempo de ejecución en el código de plantilla.
Inmediatamente después del paso anterior. Cuando la aplicación se ejecuta e invoca el código de plantilla.

En la mayoría de los casos, los números de línea del código de plantilla se proporcionan en el informe de errores. Cuando el informe de errores hace referencia a un nombre de archivo temporal, la causa habitual es un corchete no coincidente en el código de la plantilla de texto.

Puede establecer puntos de interrupción en plantillas de texto y depurar de la manera habitual.

Errores y correcciones comunes

En la tabla siguiente se enumeran los errores más comunes y sus correcciones.

Mensaje de error Description Solución
No se pudo cargar la clase base '{0}' desde la que hereda la clase Transformation. Se produce si no encuentra la clase base especificada en el inherits parámetro en una directiva de plantilla. El mensaje proporciona el número de línea de la directiva de plantilla. Asegúrese de que existe la clase especificada y de que el ensamblado en el que existe se especifica en una directiva de ensamblado.
No se pudo resolver la inclusión de texto para el archivo:{0} Se produce cuando no se encuentra una plantilla incluida. El mensaje proporciona el nombre del archivo de inclusión solicitado. Asegúrese de que la ruta de acceso del archivo es relativa a la ruta de acceso de la plantilla original, o que el archivo está en una ubicación registrada con el host, o que hay una ruta de acceso completa al archivo.
Se generaron errores al inicializar el objeto de transformación. La transformación no se ejecutará. Se produce cuando se produce un error en la clase de transformación "Initialize()" o se devuelve false. El código de la función Initialize() procede de la clase de transformación base especificada en la <directiva #@template#> y de los procesadores de directivas. Es probable que el error que provocó que la inicialización fallara esté en la lista de errores. Investigue por qué se produjo un error. Puede examinar el código generado real para Initialize() siguiendo los procedimientos para depurar una plantilla.
El componente '{0}' para el procesador de directivas '{1}' no ha recibido el conjunto de permisos de confianza total. Solo se permiten ensamblajes de confianza para proporcionar procesadores de directivas. Este procesador de directivas no se cargará. Se produce cuando el sistema no concede permisos FullTrust a un ensamblado que contiene un procesador de directivas. El mensaje proporciona el nombre del ensamblado y el nombre del procesador de directivas. Asegúrese de que solo use ensamblados de confianza en el equipo local.
La ruta '{0}' debe estar local en este equipo o ser parte de su zona de confianza. Se produce cuando una directiva o una directiva de ensamblado hace referencia a un archivo que no está en el equipo local o en la zona de confianza de la red. Asegúrese de que el directorio donde se encuentra las directivas o directivas de ensamblado se encuentra en el área de confianza. Puede agregar un directorio de red a la zona de confianza a través de Internet Explorer.
Varios errores de sintaxis, como "Token no válido 'catch'" o "Un espacio de nombres no puede contener directamente miembros". Demasiados corchetes de cierre en el código de plantilla. El compilador lo confunde con el código de generación estándar. Compruebe el número de llaves de cierre y corchetes dentro de delimitadores de código.
Bucles o condicionales no compilados o ejecutados correctamente. Por ejemplo: <#if (i>10)#> Number is: <#= i #>.

Este código siempre genera el valor de i. Solo "El número es:" es condicional.
En C#, use siempre llaves para rodear bloques de texto incrustados en instrucciones de control. Agregue llaves: <#if (i>10) { #> Number is: <#= i #><# } #>.
"Expresión demasiado compleja" al procesar una plantilla en tiempo de diseño o compilar una plantilla en tiempo de ejecución (preprocesada).

Visual Studio deja de funcionar al intentar inspeccionar el código generado por una plantilla en tiempo de ejecución.
El bloque de texto es demasiado largo. T4 convierte bloques de texto en una expresión de concatenación de cadenas, con un literal de cadena para cada línea de plantilla. Los bloques de texto muy largos pueden superar los límites de tamaño del compilador. Divida el bloque de texto largo con un bloque de expresión como:

<#= "" #>

Descripciones de advertencias y soluciones

En la tabla siguiente se enumeran las advertencias más comunes junto con correcciones, si están disponibles.

Mensaje de advertencia Description Solución
Al cargar el archivo de inclusión '{0}' se devolvió una cadena nula o vacía. Se produce si un archivo de plantilla de texto incluido está en blanco. El mensaje proporciona el nombre de archivo del archivo incluido. Quite la directiva include o asegúrese de que el archivo tiene contenido.
Compilación de la transformación: Antepone esta cadena a todos los errores o advertencias que se originan en el compilador cuando compila la transformación. Esta cadena significa que el compilador produjo un error o una advertencia. Si tiene un problema para encontrar el archivo DLL, es posible que deba proporcionar la ruta de acceso completa o un nombre seguro totalmente calificado si el archivo DLL está en la GAC.
El parámetro '{0}' ya existe en la directiva . Se omitirá el parámetro duplicado. Se produce cuando se especifica un parámetro más de una vez en una directiva . El mensaje proporciona el nombre del parámetro y el número de línea de la directiva. Quite la especificación de parámetros duplicados.
Error al cargar el archivo de inclusión '{0}'. Se omitirá la directiva de inclusión. Se produce cuando no se encuentra un archivo especificado en una include directiva . El mensaje proporciona el nombre del archivo y el número de línea de la directiva. Asegúrese de que el archivo de inclusión existe en el mismo directorio que el archivo de plantilla de texto original o en uno de los directorios de inclusión registrados con el host.
Se especificó una clase base no válida para la clase Transformation. La clase base debe derivar de Microsoft.VisualStudio.TextTemplating.TextTransformation. Se produce cuando el inherits parámetro de una directiva de plantilla especifica una clase que no hereda de TextTransformation. El mensaje proporciona el número de línea de la directiva de plantilla. Especifique una clase que derive de TextTransformation.
Se especificó una cultura no válida en la directiva 'template'. La cultura debe estar en el formato "xx-XX". Se usará la cultura invariante. Se produce cuando el parámetro de referencia cultural de una directiva de plantilla se especifica incorrectamente. El mensaje proporciona el número de línea de la directiva de plantilla. Cambie el parámetro de referencia cultural a una referencia cultural válida en el formato "xx-XX".
Se especificó un valor de depuración '{0}' no válido en la directiva de plantilla. El valor de depuración debe ser "verdadero" o "falso". Se usará el valor predeterminado de "false". Se produce cuando el debug parámetro de una directiva de plantilla se especifica incorrectamente. El mensaje proporciona el número de línea de la directiva de plantilla. Establezca el parámetro de depuración en "true" o "false".
Se especificó un valor hostSpecific '{0}' no válido en la directiva de plantilla. El valor hostSpecific debe ser "true" o "false". Se usará el valor predeterminado de "false". Se produce cuando el parámetro específico del host de una template directiva se especifica incorrectamente. El mensaje proporciona el número de línea de la directiva de plantilla. Establezca el parámetro específico del host en "true" o "false".
Se especificó un idioma '{0}' no válido en la directiva 'template'. El lenguaje debe ser "C#" o "VB". Se usará el valor predeterminado de "C#". Se produce cuando se especifica un idioma no admitido en la template directiva . Solo se permiten "C#" o "VB" (insensible a mayúsculas). El mensaje proporciona el número de línea de la directiva de plantilla. Establezca el language parámetro en la directiva de plantilla en "C#" o "VB".
Se encontraron varias directivas de salida en la plantilla. Todos, menos el primero, serán ignorados. Se produce cuando se especifican varias output directivas en un archivo de plantilla. El mensaje proporciona el número de línea de la directiva de salida duplicada. Elimine las directivas duplicadas output.
Se encontraron varias directivas de plantilla en la plantilla. Todos menos el primero serán ignorados. Se deben especificar varios parámetros dentro de una sola directiva de plantilla. Se produce si especifica varias template directivas dentro de un archivo de plantilla de texto (incluidos los archivos incluidos). El mensaje proporciona el número de línea de la directiva de plantilla duplicada. Agregue las distintas template directivas en una template directiva.
No se especificó ningún procesador para una directiva denominada "{0}". La directiva se omitirá. Se produce si especifica una custom directiva, pero no proporciona un processor atributo . El mensaje proporciona el nombre de la directiva y el número de línea. Proporcione un processor atributo con el nombre del directive procesador para la directiva .
No se encontró un procesador denominado '{0}' para la directiva denominada '{1}'. La directiva se omitirá. Se produce cuando el sistema no encuentra el directive procesador especificado dentro de una custom directiva. El mensaje proporciona el nombre de directiva, el nombre del procesador y el número de línea de la directiva. Establezca el processor atributo de la directiva en el nombre del procesador de directivas.
No se encontró un parámetro obligatorio '{0}' para la directiva '{1}'. La directiva se omitirá. Se produce cuando el sistema no proporciona un parámetro de directiva necesario. El mensaje proporciona el nombre del parámetro que falta, el nombre de la directiva y el número de línea. Proporcione el parámetro que falta.
El procesador denominado '{0}' no admite la directiva denominada '{1}'. La directiva se omitirá. Se produce cuando un procesador de directivas no admite una directiva. El mensaje proporciona el nombre y el número de línea de la directiva infractora junto con el nombre del procesador de directivas. Corrija el nombre de la directiva.
La directiva include para el archivo '{0}' provoca un bucle infinito. Se muestra si se especifican directivas de inclusión circulares (por ejemplo, el archivo A incluye el archivo B, que incluye el archivo A). No especifique directivas de inclusión circulares.
Transformación en ejecución: Antepone esta cadena a todos los errores o advertencias que se generan al ejecutar la transformación. No aplicable.
Se encontró una etiqueta de inicio o finalización inesperada dentro de un bloque. Asegúrese de que no escribió incorrectamente una etiqueta de inicio o finalización y que no tiene ningún bloque anidado en la plantilla. Se muestra cuando tiene un <# o #> inesperado. Es decir, si tiene un <# después de otra etiqueta abierta que no se ha cerrado, o si tiene un #> cuando no hay ninguna etiqueta abierta sin cerrar antes de ella. El mensaje proporciona el número de línea de la etiqueta no coincidente. Quite la etiqueta inicial o final no coincidente o use un carácter de escape.
Se especificó una directiva en el formato incorrecto. La directiva se omitirá. Especifique la directiva con el formato . <#@ name [parametername="parametervalue"]* #> Mostrado por el analizador si no se especifica una directiva en el formato correcto. El mensaje proporciona el número de línea de la directiva incorrecta. Asegúrese de que todas las directivas están en el formato <#@ name [parametername="parametervalue"]* #>. Para obtener más información, vea Directivas de plantilla de texto T4.
No se pudo cargar el ensamblado '{0}' para el procesador de directivas registrado '{1}'

{2}
Se produce cuando el host no pudo cargar un procesador de directivas. El mensaje identifica el ensamblado proporcionado para el procesador de directivas y el nombre del procesador de directivas. Asegúrese de que el procesador de directivas está registrado correctamente y de que el ensamblado existe.
No se pudo encontrar el tipo '{0}' en el ensamblado '{1}' para el procesador de directivas registrado '{2}'

{3}
Se produce cuando no se pudo cargar un tipo de procesador de directivas desde su ensamblaje. El mensaje proporciona el nombre del tipo, ensamblado y procesador de directivas. Vshost busca información del procesador de directivas (nombre, ensamblado y tipo) en el Registro. Asegúrese de que el procesador de directivas está registrado correctamente y de que el tipo existe en el ensamblado.
Se produjo un problema al cargar el ensamblado '{0}' Se produce cuando hay un problema al cargar un ensamblado. El mensaje proporciona el nombre del ensamblado. Puede especificar los ensamblados que se van a cargar en las directivas <@#assembly#> y por medio de los procesadores de directivas. El mensaje de error que sigue a esta cadena debe proporcionar más datos sobre por qué se produjo un error en la carga del ensamblado.
Se produjo un problema al crear e inicializar el procesador para una directiva denominada "{1}". El tipo del procesador es {0}. La directiva se omitirá. Se produce cuando el sistema no pudo crear ni inicializar un procesador de directivas. El mensaje proporciona el nombre y el número de línea de la directiva y el tipo del procesador. Asegúrese de usar el procesador de directivas correcto y de que el procesador de directivas tenga un constructor predeterminado público. De lo contrario, use las opciones de depuración para averiguar por qué se produce un error en el método Initialize() del procesador de directivas. Para obtener más información, consulte Solución de problemas de plantillas de texto.
Se produjo una excepción al procesar una directiva denominada "{0}". Se produce cuando un procesador de directivas produce una excepción al procesar una directiva. Asegúrese de que los parámetros del procesador de directivas son correctos.
El host produjo una excepción al intentar resolver la referencia de ensamblado "{0}". Se produce cuando el host produce una excepción cuando intenta resolver una referencia de ensamblado. El mensaje proporciona la cadena de referencia del ensamblado. Las referencias de ensamblado proceden de <las directivas @#assembly#> y de los procesadores de directivas. Asegúrese de que el parámetro "name" proporcionado en el parámetro de ensamblado es correcto.
Intento de especificar el valor no admitido {1} '{0}' para la directiva {2} Se produce mediante el RequiresProvidesDirectiveProcessor (todos nuestros procesadores de directivas generados derivan de él), cuando se proporciona un argumento de "requires" o "provides" no admitido. Asegúrese de que los nombres de los pares name='value' proporcionados en los parámetros requires y provides sean correctos.