Tutorial: Depurar una plantilla de texto que tiene acceso a un modelo
Al modificar o agregar plantillas de texto en una solución de lenguaje específico de dominio, puede recibir errores cuando el motor transforma la plantilla en código fuente o cuando compila el código generado. En el siguiente tutorial se muestran algunas de las cosas que puede hacer para depurar una plantilla de texto.
Nota
Para más información sobre las plantillas de texto en general, consulte Generación de código y plantillas de texto T4. Para más información sobre cómo depurar plantillas de texto, consulte Tutorial: Depuración de una plantilla de texto.
Creación de una solución de lenguaje específico de dominio
En este procedimiento, creará una solución de lenguaje específico de dominio que tiene las siguientes características:
Nombre: DebuggingTestLanguage
Plantilla de solución: Lenguaje mínimo
Extensión del archivo: .ddd
Nombre de la compañía: Fabrikam
Para más información sobre cómo crear una solución de lenguaje específico de dominio, consulte Cómo: Crear soluciones de lenguajes específicos de dominio.
Creación de una plantilla de texto
Agregue una plantilla de texto a la solución.
Para crear una plantilla de texto
Compile la solución y empiece a ejecutarla en el depurador. (En el menú Compilar, haga clic en Recompilar solución y, a continuación, en el menú Depurar, haga clic en Iniciar depuración). Una nueva instancia de Visual Studio abre el proyecto de depuración.
Agregue un archivo de texto denominado
DebugTest.tt
al proyecto de depuración.Asegúrese de que la propiedad Herramienta personalizada de DebugTest.tt esté establecida en
TextTemplatingFileGenerator
.
Directivas de depuración que acceden a un modelo desde una plantilla de texto
Para poder acceder a un modelo desde las instrucciones y expresiones de una plantilla de texto, primero debe llamar a un procesador de directivas generadas. La llamada al procesador de directivas generadas, hace que las clases del modelo estén disponibles para el código de la plantilla de texto como propiedades. Para más información, consulte Acceso a modelos desde plantillas de texto.
En los siguientes procedimientos, depurará un nombre de directiva y un nombre de propiedad incorrectos.
Para depurar un nombre de directiva incorrecto
Reemplace el código de DebugTest.tt por el código siguiente:
Nota
El código contiene un error. Está introduciendo el error para depurarlo.
<#@ template language="C#" inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation"#> <#@ output extension=".txt" #> <#@ modelRoot processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=ExampleModel" #> Model: <#= this.ExampleModel #> <# foreach (ExampleElement element in this.ExampleModel.Elements) { #> Element: <#= element.Name #> <# } #>
En el Explorador de soluciones, haga clic con el botón derecho en DebugTest.tt y, a continuación, haga clic en Ejecutar herramienta personalizada.
La ventana Lista de errores muestra este error:
El procesador denominado "DebuggingTestLanguageDirectiveProcessor" no admite la directiva denominada "modelRoot". La transformación no se ejecutará.
En este caso, la llamada de directiva contiene un nombre de directiva incorrecto. Ha especificado
modelRoot
como nombre de directiva, pero el nombre de directiva correcto esDebuggingTestLanguage
.Haga doble clic en el error en la ventana Lista de errores para ir al código.
Para corregir el código, cambie el nombre de la directiva a
DebuggingTestLanguage
.El cambio está resaltado.
En el Explorador de soluciones, haga clic con el botón derecho en DebugTest.tt y, a continuación, haga clic en Ejecutar herramienta personalizada.
Ahora, el sistema transforma la plantilla de texto y genera el archivo de salida correspondiente. No verá ningún error en la ventana Lista de errores.
Para depurar un nombre de propiedad incorrecto
Reemplace el código de DebugTest.tt por el código siguiente:
Nota
El código contiene un error. Está introduciendo el error para depurarlo.
<#@ template language="C#" inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation"#> <#@ output extension=".txt" #> <#@ DebuggingTestLanguage processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=LibraryModel" #> Model: <#= this.ExampleModel #> <# foreach (ExampleElement element in this.ExampleModel.Elements) { #> Element: <#= element.Name #> <# } #>
En el Explorador de soluciones, haga clic con el botón derecho en DebugTest.tt y, a continuación, haga clic en Ejecutar herramienta personalizada.
Aparece la ventana Lista de errores y muestra uno de estos errores:
(C#)
Compilando transformación: Microsoft.VisualStudio.TextTemplating<GUID>. GeneratedTextTransformation" no contiene una definición de "ExampleModel".
(Visual Basic)
Compilando transformación: "ExampleModel" no es miembro de "Microsoft.VisualStudio.TextTemplating<GUID>.GeneratedTextTransformation".
En este caso, el código de plantilla de texto contiene un nombre de propiedad incorrecto. Ha especificado
ExampleModel
como nombre de propiedad, pero el nombre de propiedad correcto esLibraryModel
. Puede encontrar el nombre de propiedad correcto en el parámetro "provides", como se muestra en el código siguiente:<#@ DebuggingTestLanguage processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=LibraryModel" #>
Haga doble clic en el error en la ventana Lista de errores para ir al código.
Para corregir el código, cambie el nombre de la propiedad a
LibraryModel
en el código de plantilla de texto.Los cambios aparecen resaltados.
<#@ template language="C#" inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation"#> <#@ output extension=".txt" #> <#@ DebuggingTestLanguage processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=LibraryModel" #> Model: <#= this.LibraryModel #> <# foreach (ExampleElement element in this.LibraryModel.Elements) { #> Element: <#= element.Name #> <# } #>
En el Explorador de soluciones, haga clic con el botón derecho en DebugTest.tt y, a continuación, haga clic en Ejecutar herramienta personalizada.
Ahora, el sistema transforma la plantilla de texto y genera el archivo de salida correspondiente. No verá ningún error en la ventana Lista de errores.