2009-01-14 7 views
6

Estoy generando código de forma dinámica, actualmente usando String.Format e incrustando marcadores de posición, pero reformatear el código C# para usarlo como plantilla es un problema, y ​​creo que usar una plantilla T4 sería mejor.¿Puedo redistribuir el motor de Microsoft T4 con mi producto?

Sin embargo, la generación de código se realizará en un sistema en ejecución, por lo que necesito saber que puedo redistribuir de forma segura y legal el motor de Microsoft T4 con mi producto.

¿Alguien más ha hecho esto? ¿O conoce la respuesta (legal)?

+1

¿Qué dice la licencia (EULA) en el T4 redistribuible? ¿Hay una redistribuible? –

+0

Ese es el problema: no he podido encontrar ninguno (todavía). Sé que debe estar empaquetado internamente en MS de alguna manera porque acaba de ser utilizado en su nuevo producto P & P Blueprints. – Rammesses

Respuesta

5

Parece que pronto puede haber otra opción.

Ayer, Miguel de Icaza publicó sobre la integración de T4 en MonoDevelop, por lo que espero que haya un conjunto de herramientas T4 mono equivalente en cualquier momento.

Ver: http://tirania.org/blog/archive/2009/Mar-10.html

+0

Esto realmente se ha liberado, y puede obtener el código fuente del repositorio de MonoDevelop. Una compilación rápida contra .Net y (con un poco de disputas), usted obtiene un motor T4 bastante fácil de usar para sus proyectos. Supongo que debería escribir un blog de cómo hacerlo para que funcione. – Rammesses

3

Puede redistribuir T4 como parte de DSLToolsRedist, sin embargo, requiere que la edición estándar de Visual Studio 2005 o superior ya esté instalada. No creo que T4 se pueda redistribuir legalmente sin Visual Studio en este momento. El escenario que describió será directly supported in Visual Studio 2010

2

Tengo la respuesta y desafortunadamente no es como lo sugirió Oleg. (Gran trabajo en T4 por cierto Oleg). No puede redistribuir T4 en este momento; es parte de VS. En VS2010 será posible precompilar plantillas T4 y luego redistribuir esas plantillas precompiladas con su aplicación sin dependencia de T4 para ejecutarlas.

1

Tengo mi propio sistema de generador de código de plantilla, compilando el código en un dominio de aplicación separado, desde antes de que saliera VS2008.

Si le interesa, publique un comentario y publicaré una url en el código.

El código para usar mi motor de plantillas es here, puede buscarlo con un navegador web o señalar un cliente Subversion en él. Tenga en cuenta que el enlace que comienza aquí realmente se detiene después de la palabra, pero el procesador de WMD del lado del servidor filtra el enlace al siguiente texto.

Tenga en cuenta que si solo copia el archivo único en ese espacio de nombres, entonces no compilará por sí mismo, requiere algunas cosas en LVK.Delegates y LVK.Scripting, espacios de nombres hasta un par de niveles desde el enlace de arriba . Si no quieres absorber toda la biblioteca, tendrás que extraer las piezas de las que se queja de una en una hasta que compile.

También hay una versión binaria de la biblioteca en /LVK_3_5/trunk/Binaries/Debug/LVK en el mismo repositorio. Si descarga esto, es tan simple como agregar una referencia a él y verificar la clase LVK.Text.Templates.TextTemplate.

Lamentablemente no tengo ningún ejemplo para mi biblioteca en este momento.

Básicamente, para utilizar una plantilla:

TextTemplate tt = new TextTemplate(); 
tt.Source = "... code here, check example file above ..."; 
tt.Compile(); 
String output = tt.Generate(singleObjectParameter); 

Dentro de la plantilla, que es básicamente todo el código que se inserta en un solo método (lo que significa que no es tan buena como la T4 en términos de ser capaz de agregue métodos fácilmente, pero puede usar métodos anónimos), tendrá acceso al objeto de datos transferido a él como un parámetro llamado datos.

Así que a la salida solo el contenido del parámetro pasado:

<%= data %> 

repetirlo:

<% for (Int32 index = 0; index < 10; index++) { %> 
<%= data %> 
<% } %> 

Si tiene alguna pregunta, enviarlos a mi correo electrónico en [email protected]

0

Es una verdadera lástima, pero como señala Oleg, si no se ha probado, ¿cómo se puede liberar?

Lassevk, ciertamente estoy interesado, estaba pensando en volver a poner en marcha un motor de plantillas que construí hace unos 10 años, pero siempre estoy dispuesto a una vida más fácil.

2

Para mayor claridad, la respuesta oficial es que no se puede distribuir el motor de Microsoft T4 como una pieza separada de Visual Studio.

Sin embargo, a partir de Visual Studio 2010, puede usar y redistribuir plantillas precompiladas, que no tienen dependencia en Visual Studio.

También puede usar T4 fuera de Visual Studio en una máquina que tenga instalado Visual Studio.

También puede licenciar y redistribuir Visual Studio Isolated Shell sin costo, y usarlo como host para sus herramientas, incluye T4.

A partir de Visual Studio 2010 SP1, tiene licencia para copiar T4 a su máquina de compilación a través de la licencia en buildserver.txt en su directorio de instalación de VS.

+0

¿Podría aclarar el punto sobre Visual Studio Isolated Shell por favor? ¿No significa eso efectivamente "sí, puedes redistribuir T4 sin costo"? – Andy

+0

No se puede dividir el shell aislado, es para crear y distribuir herramientas alojadas en el shell, pero T4 es ciertamente parte de eso. – GarethJ

Cuestiones relacionadas