Compartir a través de


Depurar 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, elija Depurar plantilla T4 en el menú contextual del archivo de plantilla de texto en el explorador de soluciones.Para depurar una plantilla de texto en tiempo de ejecución, depurar simplemente la aplicación a la que pertenece.

Para depurar una plantilla de texto, debe entender los pasos del proceso de transformación de plantillas.Los diferentes tipos de errores pueden aparecer dentro de cada paso.Estos son los pasos.

Paso

Plantilla en tiempo de diseño: cuando ocurre

Plantilla en tiempo de ejecución: cuando ocurre

Se genera el código de plantilla de texto.

Errores en directivas, o etiquetas no coinciden o no ordenadas <#…#> .

Cuando guarde la plantilla o invoca la transformación de texto.

Cuando guarde la plantilla o invoca la transformación de texto.

Se compila el código generado.

Errores de compilación en el código de plantilla.

Inmediatamente después del paso anterior.

Junto con el código de aplicación.

Ejecuta el código.

Errores en tiempo de ejecución del código de plantilla.

Inmediatamente después del paso anterior.

Cuando la aplicación ejecuta e invoca el código de plantilla.

En la mayoría de los casos, el informe de errores muestra los números de línea del código de plantilla.Cuando el informe de errores hace referencia a un nombre de archivo temporal, la causa habitual es una falta de correspondencia en los corchetes del código de la plantilla de texto.

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

Errores comunes y correcciones

En la tabla siguiente se hace una lista de los errores más comunes y sus correcciones.

Mensaje de error

Descripción

Soluciones

No se pudo cargar la clase base '{0}' de la que hereda la clase Transformation.

Se produce si no puede encontrar la clase base especificada en el parámetro inherits 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 ésta se encuentra está especificado en una directiva de ensamblado.

No se pudo resolver el texto de inclusión del archivo: {0}

Se produce al no poder encontrar 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 que está 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 'Initialize()' de la clase de transformación devolvió un error o 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.El error que impidió la inicialización probablemente está en la lista de errores.Investigue por qué se produjo un error.Puede examinar el código generado real de Initialize() siguiendo los procedimientos para depurar una plantilla.

Al ensamblado '{0}' del procesador de directivas '{1}' no se le concedió el conjunto de permisos FullTrust.Solo los ensamblados de confianza tienen permiso 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 utiliza ensamblados de confianza en el equipo local.

La ruta de acceso '{0}' debe ser local respecto a este equipo o parte de su zona de confianza.

Se produce cuando una directiva o directiva de ensamblado hace referencia a un archivo que no está en su equipo local o en la zona de confianza de su red.

Asegúrese de que el directorio donde se encuentran las directivas o directivas de ensamblado están en su zona de confianza.Puede agregar un directorio de red a su zona de confianza a través de Internet Explorer.

Varios errores de sintaxis como "Token 'catch' no válido" o "Un espacio de nombres no puede contener miembros directamente"

Hay demasiadas llaves de cierre en su código de plantilla.El compilador está confundiéndolo con el código de generación estándar.

Compruebe el número de llaves y corchetes de cierre dentro de los delimitadores del código.

Bucles o condicionales no compilados o ejecutados correctamente.Por ejemplo:

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

Este código genera siempre el valor de i.Solo "Number is:" es condicional.

En C#, utilice siempre llaves para encerrar los bloques de texto que se incrustan en instrucciones de control.

Agregue llaves:

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

"Expresión demasiado compleja" al preprocesar una plantilla de tiempo de ejecución o compilar una plantilla de tiempo de diseño (preprocesada).

Visual Studio deja de trabajar cuando se intenta inspeccionar 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 la plantilla.Los bloques de texto muy largos pueden sobrepasar los límites de tamaño del compilador.

Rompa el bloque de texto largo con un bloque de expresión como:

<#= "" #>

Descripciones de advertencias y correcciones

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

Mensaje de advertencia

Descripción

Soluciones

La carga del archivo de inclusión '{0}' devolvió una cadena null o vacía.

Se produce si un archivo de plantilla del texto incluido está vacío.El mensaje proporciona el nombre de archivo del archivo incluido.

Quite la directiva de inclusión o asegúrese de que el archivo tiene algún contenido.

Transformación de compilació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 advertencia.

Si tiene un problema para encontrar la DLL, puede que deba proporcionar la ruta de acceso completa o un nombre seguro completo si la DLL está en la GAC.

El parámetro '{0}' ya existe en la directiva.El parámetro duplicado se omitirá.

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ámetro duplicada.

Hubo un error al cargar el archivo de inclusión '{0}'.Se omitirá la directiva de inclusión.

Se produce al no poder encontrar un archivo especificado en una directiva include.El mensaje proporciona el nombre del archivo y el número de línea de la directiva.

Asegúrese de que existe el archivo de inclusión en el mismo directorio que el archivo de plantilla de texto original o en uno de los directorios de inclusión que está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 parámetro inherits 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.

Especifica una clase que deriva de TextTransformation.

Se especificó una referencia cultural no válida en la directiva de plantilla.La referencia cultural debe tener el formato "xx-XX".Se usará la referencia cultural invariable.

Se produce cuando incorrectamente se especifica el parámetro de referencia cultural en una directiva de plantilla.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 con el formato "xx-XX".

Un valor de depuración '{0}' no válido se especificó en la directiva de plantilla.El valor de depuración debe ser "true" o "false".Se usará el valor predeterminado ("false").

Se produce cuando se especifica incorrectamente el parámetro debug en una directiva de plantilla.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".

Un valor HostSpecific '{0}' no válido se especificó en la directiva de plantilla.El valor HostSpecific debe ser "true" o "false".Se usará el valor predeterminado ("false").

Se produce cuando se especifica incorrectamente el parámetro específico de host en una directiva template.El mensaje proporciona el número de línea de la directiva de plantilla.

Establezca el parámetro específico de host en "true" o "false".

Un valor de lenguaje '{0}' no válido se especificó en la directiva 'template'.El lenguaje debe ser "C#" o "VB".Se usará el valor predeterminado de "C#".

Se produce cuando un lenguaje no compatible se especifica en la directiva template.Solo se permite "C#" o "VB" (sin distinción entre mayúsculas y minúsculas).El mensaje proporciona el número de línea de la directiva de plantilla.

Establezca el parámetro language de la directiva de plantilla en "C#" o"VB".

Se encontraron varias directivas de salida en la plantilla.Se omitirán todas menos la primera.

Se produce cuando varias directivas output se especifican en un archivo de plantilla.El mensaje proporciona el número de línea de la directiva de salida duplicada.

Quite las directivas output duplicadas.

Se encontraron varias directivas de plantilla en la plantilla.Se omitirán todas menos la primera.En una directiva de plantilla deben especificarse varios parámetros para la misma.

Se produce si especifica varias directivas template dentro de un archivo de plantilla de texto (incluso los archivos incluidos).El mensaje proporciona el número de línea de la directiva de plantilla duplicada.

Agregue las diferentes directivas template en una directiva template.

No se especificó ningún procesador para una directiva denominada '{0}'.Se omitirá la directiva.

Se produce si especifica una directiva custom, pero no proporciona un atributo processor.El mensaje proporciona el nombre de la directiva y el número de línea.

Proporcione un atributo processor con el nombre del procesador directive de la directiva.

No se pudo encontrar un procesador denominado '{0}' para la directiva denominada '{1}'.Se omitirá la directiva.

Se produce cuando el sistema no puede encontrar el procesador directive especificado dentro de una directiva custom.El mensaje proporciona el nombre de la directiva, el nombre del procesador y el número de línea de la directiva.

Establezca el atributo processor de la directiva en el nombre del procesador de directivas.

No se encontró un parámetro '{0}' necesario para la directiva '{1}'.Se omitirá la directiva.

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}'.Se omitirá la directiva.

Se produce cuando un procesador de directivas no admite una directiva.El mensaje proporciona el nombre y número de línea de la directiva que provoca el error, junto con el nombre del procesador de directivas.

Corrija el nombre de la directiva.

La directiva de inclusión del archivo '{0}' produce un bucle sin fin.

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 ejecutando la transformación.

No es aplicable

Se encontró una etiqueta inicial o final inesperada dentro de un bloque.Asegúrese de que no escribió mal ninguna etiqueta de inicio o cierre, y de que no tiene ningún bloque anidado en la plantilla.

Mostrado al tener un <# o #> inesperado.Es decir, si tiene un <# después de otra etiqueta de apertura que no se ha cerrado, o si tiene un #> cuando no hay ninguna etiqueta de apertura sin cerrar antes de él.El mensaje proporciona el número de línea de la etiqueta sin correspondencia.

Quite la etiqueta de apertura o cierre sin correspondencia, o utilice un carácter de escape.

Se especificó una directiva con formato incorrecto.Se omitirá la directiva. Especifica la directiva en el formato <#@ name [parametername="parametervalue"]* #>

Lo muestra 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 existe el ensamblado.

No se pudo encontrar el tipo '{0}' en el Ensamblado '{1}' para el procesador de directivas registrado '{2}'

{3}

Se produce cuando un tipo de procesador de directivas no se pudo cargar desde su ensamblado.El mensaje proporciona el nombre del tipo, ensamblado y procesador de directivas.

vshost busca la 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 existe el tipo en el ensamblado.

Hubo 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 que se carguen ensamblados en las directivas <@#assembly#>, y por procesadores de directivas.El mensaje de error que sigue a esta cadena debería proporcionar más datos sobre por qué se produjo un error en la carga del ensamblado.

Hubo un problema al crear e inicializar el procesador para una directiva denominada '{1}'.El tipo del procesador es {0}.Se omitirá la directiva.

Se produce cuando el sistema no pudo crear o inicializar un procesador de directivas.El mensaje proporciona el nombre y número de línea de la directiva y el tipo del procesador.

Asegúrese de que utiliza el procesador de directivas correcto y de que este tiene un constructor predeterminado público.De lo contrario, utilice las opciones de depuración para averiguar por qué el método Initialize() del procesador de directivas está produciendo un error.Para obtener más información, vea Depurar una plantilla de texto T4.

Se produjo una Excepción procesando 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 al procesador de directivas son correctos.

El host produjo una excepción intentando resolver la referencia del ensamblado '{0}'.

Se produce cuando el host genera una excepción cuando intenta resolver una referencia de ensamblado.El mensaje proporciona la cadena de referencia del ensamblado.

Las referencias del 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.

Intente especificar el valor '{0}' no compatible {1} para la directiva {2}

Lo produce RequiresProvidesDirectiveProcessor (todos nuestros procesadores de directivas generados derivan de él), al proporcionar un argumento requires o provides no compatible.

Asegúrese de que los nombres de los pares name='value' proporcionados en los parámetros requires y provides son correctos.