Cuando edito T4, el script se ejecuta cada vez que cambio a otro archivo. Está bien para scripts rápidos y simples, pero algunos scripts tardan mucho tiempo en ejecutarse. ¿Hay alguna forma de desactivar este comportamiento? Quiero que la secuencia de comandos se ejecute solo cuando guardo el archivo T4 o elijo "Ejecutar herramienta personalizada" en el menú.¿Cómo detener la ejecución de T4 cada vez que cambio a otra pestaña?
Respuesta
T4 está conectado al mecanismo de herramienta personalizado (IVsSingleFileGenerator) en los sistemas de proyectos C#/VB, lo que le permite ejecutar, ejecutar menú de herramientas personalizadas y también el comportamiento de cambio de pestañas, todo por el precio de implementar una interfaz simple.
Desafortunadamente, esto significa que T4 tampoco tiene control sobre esos comportamientos, que son el estándar para las herramientas personalizadas.
Una alternativa puede ser utilizar el soporte T4 MsBuild en VS Modelling and Visualization SDK para hacer T4 en tiempo de compilación y luego deshabilitar la herramienta personalizada. Preguntaré a mi colega que construyó el soporte de msbuild si usa la herramienta personalizada para identificar el conjunto de plantillas o no y vuelve a publicar en el hilo.
Las plantillas T4 se ejecutan cuando se guarda el archivo. Si tiene la configuración VS para guardar automáticamente cuando se aleja del archivo que podría explicar el comportamiento. Revise su configuración de VS para determinar si VS está guardando el archivo cuando elimina la pestaña.
Tuve exactamente el mismo problema. Seguí los pasos de este artículo http://msdn.microsoft.com/en-us/library/ee789839.aspx sobre cómo dividir las plantillas en otro proyecto y compartir los archivos de salida.
Detalla cómo apagar el TextTemplatingFileGenerator herramienta acoplada a la plantilla haciendo clic derecho en la plantilla y la limpieza de la propiedadCustomTool. Esto detiene el código de generación de la plantilla cuando se guarda ... ¡pero TODAVÍA FUNCIONA cuando se cambian las pestañas!
Creo que la única forma de evitar esto sería mover todo el código de plantilla en un archivo nuevo con un sufijo diferente (como ttinclude o t4 o algo) y luego incluir este archivo en su archivo de plantilla T4 real utilizando el incluir directiva. De esta forma, nunca tendrá que abrir ese archivo para editar la plantilla, de modo que no se ejecutará por accidente.
Así que en un archivo llamado MyTemplate.tt:
<#@ template language="VB" debug="false" hostspecific="true"#>
<#@ include file="Include\MyTemplateCodeBehind.t4" #>
<#@ output extension=".vb"#>
<# ' Nothing to see here! #>
Mientras que en el otro archivo llamado MyTemplateCodeBehind.t4:
<#@ template language="VB" debug="false" hostspecific="true"#>
<#
For Each something In somecollection
#>
<#= something.PrintMyCode() #>
<#
Next
#>
Trate justo después de las directivas de compilación, añadir un retorno a salir método
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF6.Utility.CS.ttinclude"#><#@
output extension="Repository.cs"#><#
return string.Empty; //<-- add this line!!!
...
Lo que estoy haciendo (probablemente un mal método) está escribiendo en el principio del archivo tt una línea de excepción como:
<# throw new Exception(); #>
Porque lanzar una excepción de la parada del proceso y cuando termine todo el trabajo que solo tiene que eliminar esta línea. :)
- 1. ¿Cómo detener a Android para que no vuelva a dibujar toda la pantalla cada vez que algo cambie?
- 2. Tener que reiniciar tomcat cada vez que realice un cambio
- 3. Barra de pestañas, volver a cargar cada vez que se presiona la pestaña
- 4. Operando plantillas T4 de otra plantilla T4
- 5. ¿Canvas se vuelve a dibujar cada vez que cambia algo?
- 6. Detener eclipse cambiar a la pestaña de depuración
- 7. ¿Cómo previene que Visual Studio cambie a la pestaña Análisis de código después de cada compilación?
- 8. ¿Cómo detener la reapertura del navegador firefox una y otra vez para ver los cambios?
- 9. Xcode's 4.3.2 El organizador se congela cada vez que hago clic en la pestaña "Archivos"
- 10. ¿Cómo detener la ejecución de servicios?
- 11. Git piensa que estoy reescribiendo uno de mis archivos cada vez que hago un pequeño cambio
- 12. Tengo que reiniciar Apache cada vez que cambio mi código de Rails
- 13. ¿Cómo disparo algo cada vez que WindowState cambia en C#?
- 14. ¿Cómo saltear una línea de ejecución en windbg cada vez que golpea?
- 15. Cómo detener el comportamiento de la pestaña 'inteligente' de PyCharm
- 16. ¿Cómo impido que un área de texto se desplace hacia la parte superior cada vez que cambio su valor?
- 17. ¿Cómo detener la ejecución del selector?
- 18. ¿Cómo ejecuto un comando cada vez después de ssh'ing de una máquina a otra?
- 19. ¿Cómo detener la ejecución del código VBA?
- 20. Cómo detener la ejecución en ActionScript
- 21. ¿Cómo puedo detectar cada vez que se superponen dos UIImageView?
- 22. ¿Lanzar una excepción sin detener la ejecución?
- 23. wxPython campo de cambio en la pestaña
- 24. pestaña GUI Cambio VIM
- 25. Necesito reiniciar python en el terminal cada vez que se realiza un cambio en el script
- 26. ¿Cómo hacer que cada método de clase llame a un método específico antes de la ejecución?
- 27. esquemas de construcción Xcode 4 arruinados cada vez que cambio ramas en Git
- 28. Detener la ejecución de compilación en Jenkins
- 29. Cómo detener la ejecución de Execution ThreadPool en java?
- 30. Al desarrollar un paquete R, ¿tengo que volver a compilar el paquete cada vez que realizo un cambio?
Uso T4 Toolbox que genera múltiples archivos y modifica la solución. No estoy seguro de que funcione en MsBuild. Ejecutar T4 solo en tiempo de compilación no es una opción para mí de todos modos, quiero ver los resultados de inmediato, cuando guardo el archivo T4. Pero puede proporcionar información sobre el uso de MsBuild para otras personas que encuentren esta pregunta. Puede ser útil para ellos. – Athari
Veo - no hemos intentado integrar los dos - Oleg bien pudo haberlo hecho. Simplemente confirmé que la herramienta personalizada ya no es necesaria para msbuild, pero en su lugar necesitaría cambiar el tipo de elemento en su archivo csproj/vbproj de None/Compile a T4Transform o T4Preprocess. Los archivos de salida ya no serían parte de su proyecto. Hay metadatos que pueden redirigirlos a la carpeta obj intermedia o similar. – GarethJ