Prima di investire molto tempo nella ricerca del rasoio e della sua applicabilità, vorrei chiederti dei guru del rasoio se si potesse usare il rasoio per generare codice C#? Qualche problema che puoi pensare subito?Usa il rasoio per generare il codice?
risposta
Certamente potrebbe uso del rasoio per generare codice C#, ma in realtà non è progettata per le lingue non-XML-like. Dovresti avere molti tag > di testo .
Grazie, sono le informazioni che stavo cercando. – epitka
+1 Grazie per le informazioni su "
Andrew - Razor è 100 volte meglio di qualsiasi altro motore di template che abbia mai visto. Complimenti a te! Certamente lo userò ancora piuttosto su altri generatori di goda, anche con i tag
È possibile utilizzare il rasoio proprio come i modelli T4 per generare qualsiasi tipo di testo. Vedi questo post sul blog.
http://weblogs.asp.net/mikaelsoderstrom/archive/2010/08/03/use-razor-for-t4-templates.aspx
Il mio primo tentativo con razor dll versione 2.1.4039.23635 era molto più facile di quanto mi aspettassi
Ecco una piccola demo di lavoro
Il 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);
}
}
}
}
Il modello assomiglia a questo
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 l'elemento che impedisce <text>
rasoio di interpretare l'uscita Debug.WriteLine
Il è
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);
}
}
}
Sarebbe bello se rasoio attuerebbe @"..."@
o @'...'@
come alias per <text>...</text>
. Ho aggiunto questo razorengine.codeplex-Issue come una richiesta per migliorare. Se si prevede di utilizzare il rasoio come CodeGenerator si prega di upvote è a razorengine.codeplex-Issue
Edit: come suggerito @Epitka, possiamo usare @:
al posto di un singolo tag di testo linea:
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);
}
}
}
}
commento su "chiuso troppo ampia ": Questa domanda è davvero ampia? La vera domanda qui è "è possibile utilizzare il rasoio per generare codice e se sì come". C'è un esempio funzionante che mostra come generare codice. – k3b