2011-01-24 21 views
16

Tengo una plantilla T4 (mycode.tt) que genera un archivo cs. Normalmente hago clic derecho en el archivo tt y selecciono RunCustomTool, que internamente toma un archivo xml y genera código para mí. Ahora quiero ejecutar la herramienta personalizada usando una aplicación de Windows C#. Así que al hacer clic en un botón quiero ejecutar la herramienta personalizada. ¿Es posible ejecutar CustomTool desde C#.Ejecutando una plantilla T4 usando C#

Editar:

Tengo 2 archivos TT y uno de ellos no tiene un archivo de código subyacente cs. Pero otro tiene un archivo .cs adjunto y estoy invocando el método TransformText() del segundo archivo desde el primer archivo .tt. Entonces necesito invocar el primer archivo. Así que no puedo usar el método TransformText(). ¿Hay alguna manera de llamar dinámicamente al archivo textTemplate?

Respuesta

7

Recomendaría la ruta preprocesada tal como se respondió anteriormente mediante @jb_.

Como alternativa, si necesita que sus plantillas sigan siendo editables sin un paso de compilación para usar con su aplicación C# personalizada, y la aplicación solo se implementará en máquinas junto con Visual Studio, puede escribir un host personalizado.

http://msdn.microsoft.com/en-us/library/bb126519.aspx

17

Puede lograrlo fácilmente cuando usa VS2010. Si agrega un nuevo archivo al proyecto, elija un archivo de plantilla de texto preprocesado. Puede editar la plantilla de forma normal. En lugar de generar el resultado directamente, el archivo genera el código que se genera normalmente. Sé que suena confuso. Pero lo que ve en su archivo de salida es el código generado por el kit de herramientas de plantillas de texto para obtener su resultado (más o menos).

Este es un breve ejemplo de una plantilla de texto preprocesado llamado "TestTemplate.tt" y cómo se utiliza en su código:

El TT-archivo:

<#@ template language="C#" #> 
Some output. 

código:

using System; 
using System.Diagnostics; 

namespace Test 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      TestTemplate testTemplate = new TestTemplate(); 
      Debug.Print(testTemplate.TransformText()); 
     } 
    } 
} 
+5

Para una plantilla existente que podría cambiar la herramienta personalizada en las propiedades del '' TextTemplatingFileGenerator' a TextTemplatingFilePreprocessor'. –

+0

¿Cómo se proporcionan los parámetros? – Georg

Cuestiones relacionadas