2011-10-10 12 views
6

C'è qualche strumento sul Web che può essere utilizzato per generare stringhe da un modello, sto cercando qualcosa di simile a Razor.Modelli di testo per la generazione di stringhe in fase di esecuzione (come Razor o T4)

Le stringhe devono essere in grado di essere generate in fase di esecuzione e non dipendono da Visual Studio (come T4). E il framework dovrebbe funzionare in Silverlight.

RazorEngine è un framework che soddisfa i requisiti ma non funziona in Silverlight.

Grazie in anticipo.

+0

Controllare http://stackoverflow.com/questions/3628895/is-it-possibile-per-utilizzare-razor-view-engine-outside-asp-net –

+0

Quando si dice "funziona solo per .NET" si significa che non funziona in Silverlight? – FuleSnabel

+0

@FuleSnabel sì, sei corretto, ho corretto questo sulla domanda – Ariel

risposta

5

Spero di aver capito cosa hai chiesto, ma direi che puoi anche far funzionare T4 in SL. A T4 può essere chiesto di generare ciò che a volte è chiamato modelli di runtime. Ho definito il mio modello (molto semplice) e l'ho aggiunto al mio progetto Silverlight.

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

Normalmente genererebbe un output del tipo:

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 

Ma in questo caso mi piace per generare il codice che genera tale uscita cioè un modello di esecuzione. Per farlo, passo lo strumento personalizzato su: TextTemplatingFilePreprocessor

Ora il template genera il codice che genera quell'output. Se ti allontani da hostspecific = true non ottieni le dipendenze di Visual Studio. Estendendo la classe parziale con le variabili membro e facendole riferimento dal file modello, è possibile modificare il comportamento sul modello in runtime.

Il problema in Silverlight è che in silverlight mancano le classi: System.CodeDom.Compiler.CompilerError e System.CodeDom.Compiler.CompilerErrorCollection.

ho lavorato intorno a quel creando le mie classi per questo (solo per questo scopo):

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

    public class CompilerErrorCollection : List<CompilerError> 
    { 

    } 

} 

Ora il mio modello compila e ho appena come questo dalla mia applicazione Silverlight per produrre l'output:

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

mi è piaciuto molto questa soluzione, grazie – Ariel

Problemi correlati