2011-02-08 11 views
7

Antes de invertir mucho tiempo investigando Razor y su aplicabilidad, me gustaría preguntarle a Razor gurus si uno puede usar Razor para generar el código C#? ¿Algún problema que puedas pensar de inmediato?¿Usar la afeitadora para generar el código?

+0

comentario sobre "cerrado por ser demasiado amplia ": ¿Es esta pregunta realmente amplia? La verdadera pregunta aquí es "¿es posible usar la afeitadora para generar código y si es así cómo"? Hay un ejemplo de trabajo que muestra cómo generar código. – k3b

Respuesta

4

Por supuesto que podría uso de afeitar para generar código C#, pero no es realmente diseñado para idiomas que no son XML similar. Tendría que tener muchas etiquetas < de texto >.

+0

Gracias, esa es la información que estaba buscando. – epitka

+0

+1 Gracias por la información sobre '' que ayudó a crear una demostración funcional. (ver mi respuesta a continuación) – k3b

+0

Andrew - Razor es 100 veces mejor que cualquier otro motor de plantillas que he encontrado. ¡Felicitaciones a usted! Ciertamente, todavía preferiría usarlo sobre otros generadores de gode, incluso con etiquetas ! –

11

Mi primer intento con la versión razor .dll 2.1.4039.23635 era mucho más fácil de lo que esperaba

Aquí es una pequeña demostración de trabajo

El CodeGenerator

using System.Diagnostics; 
using RazorEngine; 

namespace CodeGen3b 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string template = ... see below; 
      try 
      { 
       string generatedCode = Razor.Parse(template, 
            new { UserNamespace = "MyOwnNamespace" }); 
       Debug.WriteLine(generatedCode); 

      } 
      catch (System.Exception ex) 
      { 
       Debug.WriteLine(ex.Message); 
       Debug.WriteLine(ex.StackTrace); 
      } 
     } 
    } 
} 

La plantilla se ve así

using System; 
namespace @Model.UserNamespace 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
       @for(int i = 0; i < 3; i++){ 
       <text>Debug.WriteLine("hello @i " + @Model.UserNamespace); 
</text>} 
     } 
    } 
} 

Nota <text> el elemento que impide la maquinilla de afeitar de la interpretación de la salida Debug.WriteLine

El es

using System; 
namespace MyOwnNamespace 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
       Debug.WriteLine("hello 0 " + MyOwnNamespace); 
       Debug.WriteLine("hello 1 " + MyOwnNamespace); 
       Debug.WriteLine("hello 2 " + MyOwnNamespace); 
     } 
    } 
} 

Sería bueno si la maquinilla de afeitar implementaría @"..."@ o @'...'@ como alias para <text>...</text>. Agregué este razorengine.codeplex-Issue como una solicitud para mejorar. Si va a utilizar la maquinilla de afeitar como CodeGenerator favor upvote al razorengine.codeplex-Issue

Editar: como sugiere @Epitka, podemos utilizar @: en lugar de una sola etiqueta de línea de texto:

using System; 
namespace @Model.UserNamespace 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
       @for(int i = 0; i < 3; i++){ 
       @:Debug.WriteLine("hello @i " + @Model.UserNamespace); 
       } 
     } 
    } 
} 
+2

¿Ya hay uno? @: – epitka

+0

epitka es correcta: http://weblogs.asp.net/scottgu/archive/2010/12/15/asp-net-mvc-3-razor-s-and-lt-text-gt-syntax.aspx –

+0

@ k3b ¡Gracias! ¿podría crear un pequeño proyecto de su ejemplo y compartirlo para su descarga? – Shahin

Cuestiones relacionadas