Je cherche un moteur de gabarit .net - quelque chose de simple, léger, stable avec pas trop de dépendances. Pour le moment, tout ce dont j'ai besoin, c'est de créer des courriels textuels et HTML au format template. Quelqu'un peut-il me donner une bonne recommandation?
Si cela vous aide, quelque chose comme les bibliothèques Freemarker ou Velocity de Java.
[MISE À JOUR] Merci pour les réponses reçues jusqu'à présent - très apprécié. Je suis vraiment intéressé par les recommandations ou les histoires de guerre de quand vous avez utilisé ces bibliothèques. Semble être le meilleur moyen de prendre une décision sans essayer chacun à son tour.
RazorEngine, un moteur de templates basé sur le moteur d'analyse de Razor de Microsoft.
https://github.com/Antaris/RazorEngine
Je ne l'ai pas utilisé, mais je le trouve intéressant car, si vous avez un arrière-plan ASP.NET MVC, vous n'avez pas besoin d'apprendre quelque chose de nouveau.
Liste plus complète
Je recommanderais Générateur CodeSmith . C'est un générateur de code basé sur des modèles, avec des mises à jour constantes et une communauté active. Voici une liste de des modèles fournis avec CodeSmith Generator.
string template des personnes anltr.org avec aussi la version C # .
Je viens de publier un projet open source. Il est principalement destiné aux modèles de courrier électronique, mais vous pouvez utiliser l'analyseur lui-même si vous le souhaitez. Vous pouvez lire plus de détails et récupérer le code source de mon blog.
Certains tests avec les guidons, RazorEngine et SharpTAL ci-dessous:
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
//RAZOR
string razorTemplate = @"@model ConsoleApplication4.Test
<h1>@Model.Title</h1>
@if(Model.Condition1)
{
<span>condition1 is true</span>
}
<div>
@foreach(var movie in Model.Movies)
{<span>@movie</span>}
</div>";
//burning
Engine.Razor.RunCompile(razorTemplate, "templateKey", typeof(Test), new Test());
sw.Start();
var result1 = Engine.Razor.RunCompile(razorTemplate, "templateKey", typeof(Test), new Test());
sw.Stop();
Console.WriteLine("razor : "+sw.Elapsed);
//SHARPTAL
string sharpTalTemplate = @"<h1>${Title}</h1>
<span tal:condition=""Condition1"">condition1 is true</span>
<div tal:repeat='movie Movies'>${movie}</div>";
var test = new Test();
var globals = new Dictionary<string, object>
{
{ "Movies", new List<string> {test.Movies[0],test.Movies[1],test.Movies[2] } },
{ "Condition1", test.Condition1 },
{ "Title", test.Title },
};
var tt = new Template(sharpTalTemplate);
tt.Render(globals);
sw.Restart();
var tt2 = new Template(sharpTalTemplate);
var result2 = tt2.Render(globals);
sw.Stop();
Console.WriteLine("sharptal : " + sw.Elapsed);
//HANDLEBARS
string handleBarsTemplate = @"<h1>{{Title}}</h1>
{{#if Condition1}}
<span>condition1 is true</span>
{{/if}}
<div>
{{#each Movies}}
<span>{{this}}</span>
{{/each}}
</div>";
var tt3 = Handlebars.Compile(handleBarsTemplate);
sw.Restart();
var result3 = tt3(new Test());
sw.Stop();
Console.WriteLine("handlebars : " + sw.Elapsed);
Console.WriteLine("-----------------------------");
Console.WriteLine(result1);
Console.WriteLine(result2);
Console.WriteLine(result3);
Console.ReadLine();
}
}
public class Test
{
public bool Condition1 { get; set; }
public List<string> Movies { get; set; }
public string Title { get; set; }
public Test()
{
Condition1 = true;
Movies = new List<string>() { "Rocky", "The Fifth Element", "Intouchables" };
Title = "Hi stackoverflow! Below you can find good movie list! Have a good day.";
}
}
}
et résultats:
Je pense que Moustache (http://mustache.github.com/) pourrait également convenir.
DotLiquid est un très joli système de templates pour .NET.
Il est dérivé de Ruby’s Liquid Markup, avec les exigences .NET Framework 3.5 ou supérieures.
XCST (modèles eXtensible C-Sharp)
<ul>
<c:for-each name='n' in='System.Linq.Enumerable.Range(1, 5)' expand-text='yes'>
<li>{n}</li>
</c:for-each>
</ul>
essayez celui-ci: Email Template Framework http://www.bitethebullet.co.uk/Email_Template_Framework.aspx
Cela fonctionne très bien sous ASP.NET et WinForms et est toujours en développement actif. Il existe également une très belle documentation et des exemples faciles à creuser.
SharpTAL - moteur autonome en développement actif et sans dépendances, rapide
Avez-vous vu NVelocity, un portage .NET de Velocity? http://nvelocity.sourceforge.net/
NVELOCITY, bien que vieux, dernière version en 2003, ça suffit.
http://csharp-source.net/open-source/template-engines
http://joel.net/code/dotnet_templates.aspx
J'espère que cela t'aides!!!