Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Antes de depurar una plantilla de texto, debe comprender los dos pasos del proceso de transformación de plantillas. En cada paso pueden producirse diferentes clases de errores. Estos son los pasos.
El motor de transformación de plantillas de texto crea una clase que se denomina clase de transformación generada. Para crear la clase de transformación generada, el motor de transformación de plantillas de texto debe ser capaz de analizar la plantilla de texto.
En este paso, los errores de la plantilla de texto como unas etiquetas incorrectas pueden impedir que se analice. Los errores se notifican con el número de línea de plantilla de texto correcto.
El motor compila la clase de transformación generada.
En este caso, los errores de código podrían impedir que se compilase la clase de transformación generada. La mayor parte de los errores se notifican con el número de línea de plantilla de texto correcto. Una correspondencia incorrecta en los corchetes del código de plantilla pueden producir errores que hacen referencia a la clase transformada, que tiene un nombre de archivo temporal.
La clase de transformación compilada se ejecuta para generar el resultado.
Los errores de esta fase no se notifican con un número de línea correcto. Puede recorrer la ejecución del código de plantilla, pero debe iniciar el depurador de forma explícita tal como se describe en una sección posterior.
Para depurar una plantilla de texto, debe corregir primero los errores de la plantilla de texto. A continuación, debe corregir los errores de la clase de transformación generada.
Nota
Al transformar una plantilla de texto, puede recibir errores de tres orígenes diferentes: la plantilla de texto, la clase de transformación generada y cualquier directiva a la que llama desde la plantilla de texto. En este tutorial, depurará los errores de la plantilla de texto y la clase de transformación generada. Sin embargo, también puede utilizar estos procedimientos para depurar directivas personalizadas.
Las tareas que se ilustran en este tutorial son las siguientes:
Depurar una etiqueta de plantilla de texto incorrecta
Recorrer el código de plantilla
Crear una plantilla de texto
Cree un proyecto de aplicación de consola de C# y agregue una plantilla de texto a la solución. Depurará esta plantilla de texto en pasos posteriores.
Para crear una plantilla de texto
En Visual Studio, cree una nueva aplicación de consola de C# y denomínela DebugTemplate.
Agregue un archivo de plantilla de texto con el nombre DebugTest.tt al proyecto DebugTemplate.
Asegúrese de que la propiedad Herramienta personalizada de DebugTest.tt está establecida en TextTemplatingFileGenerator.
Edite el archivo para que contenga únicamente la siguiente línea:
<#@ output extension=".txt" #>Guarde el archivo.
El sistema transforma la plantilla de texto y genera el archivo de salida correspondiente. El nuevo archivo aparece en el Explorador de soluciones bajo el archivo de plantilla de texto.
Depurar una etiqueta de plantilla de texto incorrecta
Un error de sintaxis habitual al escribir plantillas de texto es utilizar una etiqueta de apertura o cierre incorrecta. En este procedimiento, depurará una etiqueta incorrecta.
Para depurar una etiqueta de plantilla de texto incorrecta
Agregue el código siguiente a DebugTest.tt:
Nota
El código contiene un error. Agregamos el error a propósito para depurarlo.
<# for (int i = 0; i < 3; i++) { > Hello, World! <# } #>Guarde el archivo.
Aparece la ventana Lista de errores y muestra este error:
Se ha encontrado una etiqueta de apertura o cierre inesperada dentro de un bloque. Asegúrese de que no escribió mal ninguna etiqueta de apertura o cierre, y de que no tiene ningún bloque anidado en la plantilla.
En este caso, el error del código es una etiqueta de cierre incorrecta. Falta # en la etiqueta de cierre.
Haga doble clic en el error de la ventana Lista de errores para saltar al código.
Para corregir el código, agregue # a la etiqueta de cierre.
<# for (int i = 0; i < 3; i++) { #>Guarde el archivo.
Ahora el sistema transforma la plantilla de texto y genera el archivo de salida correspondiente. No hay ningún error en la ventana Lista de errores.
Recorrer el código de plantilla
Para recorrer el código de plantilla, necesita agregar dos elementos a la plantilla:
<@#template debug="true" #>
System.Diagnostics.Debugger.Launch();
En el siguiente procedimiento, depurará un índice de elemento que no existe. Este error es similar a los errores de los procedimientos anteriores. Sin embargo, esta vez lo depurará con el Depurador de Visual Studio.
Para depurar con el depurador
Cree una carpeta C:\nonsense y guarde en ella un archivo de texto vacío con el nombre nonsense.
Reemplace el código de DebugTest.tt por el siguiente código:
Nota
El código contiene un error. Agregamos el error a propósito para depurarlo.
<#@ 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 #> <# } } #>Guarde el archivo.
Aparece la ventana Lista de errores y muestra el siguiente error:
Transformación en ejecución: System.Xml.XmlException: falta el elemento raíz.
Agregue una directiva template con el parámetro debug establecido en true:
<#@ template debug="true" #>Agregue una instrucción System.Diagnostics.Debugger.Launch() al código de plantilla de texto.
El código será similar al que aparece a continuación:
<#@ 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 #> <# } } #>Ejecute de nuevo la transformación.
Se abrirá el cuadro de diálogo Depurador Just-In-Time de Visual Studio.
En la lista Depuradores posibles, haga clic en Nueva instancia de Visual Studio 2010 y, a continuación, haga clic en Sí.
DebugTest.tt se abre en una nueva instancia de Visual Studio.
Recorra el código hasta la línea:
xDoc.Load(@"C:\nonsense\nonsense.xml");El error se producirá en esta línea.
Cierre la segunda instancia de Visual Studio.
En el menú Depurar, haga clic en Detener depuración.
En el menú Archivo, haga clic en Salir.
Cuando se le pida que guarde los cambios en la solución, haga clic en No.
La segunda instancia de Visual Studio se cierra.
Corrija la plantilla de texto y quite las características de depuración.
En el Explorador de soluciones, haga doble clic en DebugTest.tt para abrirlo en el editor.
Corrija el nombre de archivo incorrecto. Por ejemplo, sustitúyalo por:
@"C:\\Program Files\\Microsoft Visual Studio 10.0\\Xml\\SnippetsIndex.xml"
Quite la directiva template y el salto de línea.
La plantilla de texto debe ser similar a la siguiente:
<#@ 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 #> <# } #>
Guarde DebugTest.tt. Compruebe que no hay ningún error y que el archivo .txt resultante muestra los nombres de nodo del archivo XML.
Vea también
Referencia
Errores y advertencias comunes mientras al utilizar plantillas de texto