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();
Compruebe http://stackoverflow.com/questions/3628895/is-it-possible-to-use-razor-view-engine-outside-asp-net –
Cuando dice "solo funciona para .NET" ¿Quiere decir que no funciona en Silverlight? – FuleSnabel
@FuleSnabel sí, estás correcto, lo corregí en la pregunta – Ariel