2008-10-22 4 views
9

¿Es posible utilizar el motor de plantillas asp (con la clase de código parcial detrás, bloques dinámicos <% ...%> y similares) para generar no HTML? Quiero tener una forma limpia y sostenible de generar código de forma dinámica. (Específicamente, quiero generar código LaTeX poblado con valores de una base de datos.)Usando el motor de representación aspx para generar código no HTML

Actualmente mis plantillas LaTeX son cadenas de recursos con marcadores de posición que string.replace con los valores de la base de datos. Esta solución se volvió rápidamente muy difícil de mantener y limpiar. Realmente me gustaría usar los bloques dinámicos del marcado aspx, pero no estoy seguro de si aspx arrojará un ajuste cuando el resultado no es HTML, ob) cómo renderizar el resultado en un archivo .tex .

El código de generación en sí se encuentra en un C# .dll. Estamos usando .NET 3.5

¿Esto es posible? Gracias por adelantado.

Respuesta

7

La plantilla T4 que viene con Visual Studio 2008 de forma nativa o con Visual Studio 2005 SDK, puede generar casi cualquier cosa que desee.

Puede tener más información en los siguientes enlaces:

estoy bastante seguro de que todos esos enlaces son un buen comienzo para nuestra búsqueda

Si desea generar plantillas T4 fuera de Visual Studio, no es costumbre tarea de MSBuild para invocar una plantilla T4 (link)

Este es un ejemplo del código "Ejecutar" de la tarea de MSBuild. Click here for the source code:

public override bool Execute() 
{ 
    bool success = false; 

    //read in the template: 
    string template = File.ReadAllText(this.TemplatePath); 

    //replace tags with property and item group values: 
    ProjectHelper helper = new ProjectHelper(this); 
    template = helper.ResolveProjectItems(template); 

    //copy the template to a temp file: 
    this._tempFilePath = Path.GetTempFileName(); 
    File.WriteAllText(this._tempFilePath, template); 

    //shell out to the exe: 
    ProcessHelper.Run(this, TextTransform.ToolPath, TextTransform.ExeName, string.Format(TextTransform.ArgumentFormat, this.OutputPath, this._tempFilePath)); 
    success = true; 

    return success; 
} 
+0

Según tengo entendido, T4 es para generación de tiempo de diseño. Necesito generar el látex en tiempo de ejecución, como un asp. Si se puede llamar a T4 en tiempo de ejecución, parece la herramienta correcta, pero no estoy seguro de que pueda hacerlo. – Wyatt

+0

Acabo de editar eso y encontré un enlace para generarlo desde MSBuild en lugar de Visual Studio. –

+0

¡Brillante! Gracias. – Wyatt

0

No veo por qué no. Alguien que conocí en un trabajo anterior creó un generador de envoltura de base de datos usando páginas ASP.NET y el control de repetidor para insertar propiedades. Luego, escribió el contenido del documento en un archivo fuente.

Si le preocupa que ASP.NET se lance, puede crear un caso de prueba muy limitado y comprobarlo usted mismo. No debería tomarse demasiado tiempo para probar una teoría y hacerle saber si satisface sus necesidades.

0

Es ciertamente posible. La mayoría de los controles de servidor estarán desactivados, ya que automáticamente emitirán etiquetas HTML. Sin embargo, puede vincular la página a la información y usar expresiones de enlace de datos. Visual Studio sin duda se quejará sobre el marcado no válido.

Luego, debe ejecutar sus páginas a través de Cassini o la interconexión ASP.NET para obtener el resultado. Tengo un arnés de prueba de unidad en alguna parte que hace eso, y es sorprendentemente fácil.

A mejor, idea, sin embargo, probablemente sería utilizar un generador de código. Algo como CodeSmith debería funcionar bien, o incluso Visual Studio está integrado en T4 y le ofrece mucha flexibilidad sin intentar vincularlo con HTML.

+0

¿Pero se pueden representar las plantillas T4 en tiempo de ejecución? – Wyatt

0

Sí se puede. Simplemente cree una página .aspx estándar, elimine todo el HTML y coloque el contenido que desee en la página. Luego puede usar las etiquetas <%%> para colocar contenido dinámico dentro de la página. Y, como dijo Jason Z, puede usar el control Repeater para recorrer las colecciones de elementos para listar en la "página". Además, no podrá usar todos los otros controles del servidor ya que generan HTML, pero aún puede crear su propio control de servidor y/o controles de usuario según sea necesario.

Cuestiones relacionadas