2011-10-10 17 views
6

¿Hay alguna herramienta en la web que se pueda usar para generar cadenas a partir de una plantilla? Estoy buscando algo similar a Razor.Plantillas de texto para la generación de cadenas en tiempo de ejecución (como Razor o T4)

Las cadenas deben poder generarse en tiempo de ejecución y no dependen de Visual Studio (como T4). Y el marco debería funcionar en Silverlight.

RazorEngine es un marco que cumple los requisitos pero no funciona en Silverlight.

Gracias de antemano.

+0

Compruebe http://stackoverflow.com/questions/3628895/is-it-possible-to-use-razor-view-engine-outside-asp-net –

+0

Cuando dice "solo funciona para .NET" ¿Quiere decir que no funciona en Silverlight? – FuleSnabel

+0

@FuleSnabel sí, estás correcto, lo corregí en la pregunta – Ariel

Respuesta

5

Afortunadamente entendí lo que pediste, pero yo diría que también puedes hacer que T4 funcione en SL. Se le puede pedir a T4 que genere lo que a veces se denomina plantillas de tiempo de ejecución. Definí mi plantilla (muy simple) y la agregué a mi proyecto de Silverlight.

<# 
    for (var iter = 0; iter < 10; ++iter) 
    { 
#> 
    This is just a test: #<#=iter#> 
<# 
    } 
#> 

Normalmente se generaría una salida como esta:

This is just a test: #0 
This is just a test: #1 
This is just a test: #2 
This is just a test: #3 
This is just a test: #4 
This is just a test: #5 
This is just a test: #6 
This is just a test: #7 
This is just a test: #8 
This is just a test: #9 

Pero en este caso me gustaría generar el código que genera que la producción es decir, una plantilla de tiempo de ejecución. Para hacer eso, cambio la herramienta personalizada a: TextTemplatingFilePreprocessor

Ahora la plantilla genera el código que genera esa salida. Si te mantienes alejado de hostspecific = true, no obtienes dependencias de Visual Studio. Al extender la clase parcial con variables miembro y hacer referencia a ellas desde el archivo de plantilla, puede modificar el comportamiento en la plantilla en tiempo de ejecución.

El problema en Silverlight es que silverlight carece de las clases: System.CodeDom.Compiler.CompilerError y System.CodeDom.Compiler.CompilerErrorCollection.

trabajé en torno a que mediante la creación de mis propias clases para que (sólo para este propósito):

namespace System.CodeDom.Compiler 
{ 
    public class CompilerError 
    { 
     public string ErrorText; 
     public bool IsWarning; 
    } 

    public class CompilerErrorCollection : List<CompilerError> 
    { 

    } 

} 

Ahora mi plantilla compila y acabo como si fuera esto desde mi aplicación Silverlight para producir la salida:

var runtimeTemplate = new MyRuntimeTemplate(); 
string output = runtimeTemplate.TransformText(); 
+0

me gustó mucho esta solución, gracias – Ariel

Cuestiones relacionadas