Можете ли вы порекомендовать шаблонный движок.net?
Я ищу движок шаблонов.net - что-то простое, легкое, стабильное и не слишком много зависимостей. Все, в чем я нуждаюсь сейчас, - это создание шаблонных текстовых и HTML-писем. Кто-нибудь может дать мне хорошую рекомендацию?
Если это поможет - что-то вроде библиотек Java Freemarker или Velocity.
[ОБНОВЛЕНИЕ] Спасибо за ответы до сих пор - высоко ценится. Я действительно увлечен рекомендациями или военными историями, когда вы использовали эти библиотеки. Кажется, это лучший способ принять решение, не пытаясь каждый по очереди.
15 ответов
RazorEngine, шаблонизатор, созданный на основе механизма синтаксического анализа Razor от Microsoft.
https://github.com/Antaris/RazorEngine
Я не использовал его, но я нахожу это интересным, потому что если у вас есть опыт ASP.NET MVC, вам не нужно будет изучать что-то новое.
Я бы порекомендовал CodeSmith Generator. Это генератор кода на основе шаблонов с постоянными обновлениями и активным сообществом. Вот список шаблонов, которые поставляются с CodeSmith Generator.
Более полный список
- ASP.Net встроенный WebForm View Engine
- ASPView
- гитов
- NHaml (.Net порт Хамла)
- искра
- NVelocity
- StringTemplate.Net
DotLiquid - очень хорошая система шаблонов для.NET.
Он основан на жидкой разметке Ruby с требованиями.NET Framework 3.5 или выше.
Некоторые тесты с Handlebars, RazorEngine и SharpTAL ниже:
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 stackru! Below you can find good movie list! Have a good day.";
}
}
}
и результаты:
Я думаю, что усы (http://mustache.github.com/) могут также отвечать всем требованиям.
Я только что выпустил проект с открытым исходным кодом. Он нацелен главным образом на шаблонизацию электронной почты, но вы можете использовать его самостоятельно, если хотите. Вы можете прочитать некоторые подробности и получить исходный код из моего блога.
Попробуйте это: Email Template Framework http://www.bitethebullet.co.uk/Email_Template_Framework.aspx
Он отлично работает под ASP.NET и WinForms и все еще находится в активной разработке. Есть также очень хорошая документация и легко копаться в примерах.
XCST (расширяемые шаблоны 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>
NVELOCITY, хотя он и старый, последнего выпуска в 2003 году достаточно.
Вы видели NVelocity, порт.NET для Velocity? http://nvelocity.sourceforge.net/
http://csharp-source.net/open-source/template-engines
http://joel.net/code/dotnet_templates.aspx
Надеюсь это поможет!!!
SharpTAL - автономный движок в активной разработке и без зависимостей, быстрый