Ответ 1
Вот еще пара:
- NHaml
- Spark
- Brail (можно использовать standalone)
О NVelocity, он был раздвоен ребятами замка, он разрабатывается здесь
Для писем мне никогда не нужно больше, чем NVelocity.
Я ищу механизм моделирования шаблонов .net - что-то простое, легкое, стабильное с не слишком большим количеством зависимостей. Все, в чем я нуждаюсь сейчас, это создание шаблонных текстовых и html-сообщений. Может ли кто-нибудь дать мне хорошую рекомендацию?
Если это вообще помогает - что-то вроде Java Freemarker или Velocity.
[ОБНОВЛЕНИЕ] Спасибо за ответы до сих пор - высоко ценится. Я действительно интересуюсь рекомендациями или историями войны, когда вы использовали эти библиотеки. Кажется, это лучший способ принять решение, не пытаясь каждый по очереди.
Вот еще пара:
О NVelocity, он был раздвоен ребятами замка, он разрабатывается здесь
Для писем мне никогда не нужно больше, чем NVelocity.
Более полный список
Я бы рекомендовал CodeSmith Generator. Это генератор кода на основе шаблонов, с постоянными обновлениями и активным сообществом. Вот список шаблонов, которые поставляются с генератором CodeSmith.
RazorEngine, механизм шаблонов, построенный на механизме синтаксического анализа Microsoft Razor.
https://github.com/Antaris/RazorEngine
Не использовал его, но я нахожу это интересным, потому что, если у вас есть фон ASP.NET MVC, вам не нужно будет изучать что-то новое.
строковый шаблон от людей anltr.org с С# версия тоже.
Я только что выпустил проект с открытым исходным кодом. Он ориентирован главным образом на шаблоны электронной почты, но вы можете использовать синтаксический анализатор самостоятельно, если хотите. Вы можете прочитать более подробную информацию и получить исходный код из моего блога.
Я думаю, что Mustache (http://mustache.github.com/) может поместиться и в счет.
Некоторые тесты с 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 stackoverflow! Below you can find good movie list! Have a good day.";
}
}
}
и результаты:
попробуйте следующее: Структура шаблона электронной почты http://www.bitethebullet.co.uk/Email_Template_Framework.aspx
Он отлично работает под ASP.NET и WinForms и все еще находится в активной разработке. Существует также очень хорошая документация и легко выкапывать в примерах.
DotLiquid - очень приятная система шаблонов для .NET.
Он получен из Rubys Liquid Markup с требованиями .NET Framework 3.5 или выше.
Вы видели NVelocity, порт .NET Velocity? http://nvelocity.sourceforge.net/
http://csharp-source.net/open-source/template-engines
http://joel.net/code/dotnet_templates.aspx
Надеюсь, это поможет!!!
NVELOCITY, хотя он старый, последний релиз в 2003 году, достаточно.
SharpTAL - автономный движок в активной разработке и без зависимостей, быстрый
XCST (eXtensible C-Sharp Templates)
<ul>
<c:for-each name='n' in='System.Linq.Enumerable.Range(1, 5)' expand-text='yes'>
<li>{n}</li>
</c:for-each>
</ul>