T4 sin Visual Studio?

Estoy intentando conectar algunas plantillas genéricas de código al proceso de comstackción automatizado de mi equipo. Nuestro equipo de SCM no quiere Visual Studio en nuestra máquina de comstackción (lo que me cuesta mucho discutir).

¿Hay alguna manera de instalar el motor T4 sin Visual Studio?

En realidad no estamos generando código … estamos generando scripts de Sandcastle y definitivamente queremos que se haga en el servidor de comstackción. Hemos adoptado un enfoque en el que creamos una serie de atributos personalizados con los que decoramos nuestro código, que da forma a la forma en que se genera el documento. Así que tenemos un conjunto de archivos .tt que reflejan nuestros ensamblajes para estos atributos y genera el archivo de entrada de Sandcastle (.shfb). Pude haberlo hecho con una herramienta personalizada, pero T4 encajaba muy bien.

De todos modos … He confirmado que puede ejecutar TextTransform.exe sin Visual Studio. Todo lo que necesita es el presente de Microsoft.VisualStudio.TextTemplating.dll. Creé una máquina virtual nueva, instalé .NET 3.5 y copié lo siguiente en el sistema de archivos:

  • TextTransform.exe
  • TextTemplate.ico
  • Microsoft.VisualStudio.TextTemplating.dll
  • Test.tt (algo que creé)

Test.tt se veía así:

<#@ template language="C#3.5" debug="true" hostspecific="true" #> <#@ assembly name="System.Xml" #> <#@ import namespace="System" #> <#@ import namespace="System.Collections"#> <#@ import namespace="System.Collections.Generic"#> <#@ import namespace="System.Xml" #> <#@ output extension=".cs" #> 

Prueba: <# = System.DateTime.Now.ToString () #> ….

Desde la VM, ejecuté Test.tt de esta manera:

C: \ TextTransform.exe Test.tt

y Test.cs fue creado conteniendo

Prueba: 6/10/2009 5:33:32 PM ….

¡¡¡¡VICTORIA!!!!

La parte más difícil fue encontrar Microsoft.VisualStudio.TextTemplating.dll. Tuve que iniciar FileMon y ejecutar una plantilla en mi caja que tiene Visual Studio. FileMon luego me dijo de dónde lo estaba cargando TextTransform.exe. Esto puede estar en varios lugares potencialmente, pero lo encontré en el GAC en C: \ Windows \ assembly \ GAC_MSIL \ Microsoft.VisualStudio.TextTemplating \ 9.0.0.0__b03f5f7f11d50a3a \ Microsoft.VisualStudio.TextTemplating.dll. Para navegar a esa ubicación usando Windows Explorer, tuve que crear una subst como esta:

subst X: C: \ Windows \ assembly

entonces podría navegar a X: \ Windows \ assembly \ GAC_MSIL \ Microsoft.VisualStudio.TextTemplating \ 9.0.0.0__b03f5f7f11d50a3a \ y copiar el dll.

De todos modos … gracias por la idea mannish. Espero que esto ayude a algún otro pobre alma algún día 🙂

Escribí una implementación limpiamente invertida de un motor T4 para MonoDevelop IDE. Es de código abierto, con licencia bajo licencia MIT / X11 permisiva, por lo que puede insertar el motor en su aplicación o redistribuirlo. También hay una implementación de la herramienta de línea de comandos TextTransform.exe y algunas API en el espacio de nombres Mono.TextTemplating para ayudar a alojar el motor.

La única característica que falta en este momento es la de los proveedores de directivas personalizadas, pero los parches para esto son bienvenidos 🙂

Puede obtener el código de monodesarrollo / main / src / addins / TextTemplating en Mono SVN.

Así que este es el enfoque que terminé tomando:

Tengo una máquina de desarrollo con visual studio 2010 sp1 y una máquina de construcción (usando msbuild).

  1. En la máquina de desarrollo instale Visual Studio 2010 sp1 sdk
  2. En la máquina de desarrollo instale Microsoft Visual Studio 2010 Visualization & Modeling SDK
  3. En la máquina de creación, crea una carpeta
  4. Copie los siguientes archivos de la máquina de desarrollo a la nueva carpeta en la máquina de comstackción:
    • \ Archivos de progtwig \ Microsoft Visual Studio 2010 SDK \ VisualStudioIntegration \ Common \ Assemblies \ v4.0 \
      • Microsoft.VisualStudio.TextTemplating.10.0.dll
      • Microsoft.VisualStudio.TextTemplating.Interfaces.10.0.dll
      • Microsoft.VisualStudio.TextTemplating.VSHost.10.0.dll
    • \ Archivos de progtwig \ MSBuild \ Microsoft \ VisualStudio \ TextTemplating \ v10.0 \
      • Microsoft.VisualStudio.TextTemplating.Sdk.Host.10.0.dll
    • \ Archivos de progtwig \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ PublicAssemblies \
      • Microsoft.VisualStudio.TextTemplating.Modeling.10.0.dll
    • \ Archivos de progtwig \ Archivos comunes \ microsoft shared \ TextTemplating \ 10.0 \
      • TextTransform.exe
      • TextTransform.ico

Hay prest que deberías ser bueno para ir.


Otras lecturas:

  • Para obtener información más detallada, consulte este artículo msdn
  • Y la excelente publicación de blog de Oleg Sych sobre la integración de msbuild

No lo he intentado, pero creo que usted podría tomar la herramienta de línea de comandos, soltarla en su servidor de comstackción y transformar sus plantillas antes de / durante la comstackción.

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

Tengo entendido que aún necesitaría tener instalado Visual Studio. ¿Por qué nadar contra la stream sin embargo? ¿Ha considerado generar código en tiempo de diseño en lugar de generar tiempo?

Para 12 solo necesitas copiar

C: \ Archivos de progtwig (x86) \ Archivos comunes \ Microsoft Shared \ TextTemplating \ 12.0