Подтвердить что ты не робот

Можете ли вы рекомендовать механизм шаблонов .net?

Я ищу механизм моделирования шаблонов .net - что-то простое, легкое, стабильное с не слишком большим количеством зависимостей. Все, в чем я нуждаюсь сейчас, это создание шаблонных текстовых и html-сообщений. Может ли кто-нибудь дать мне хорошую рекомендацию?

Если это вообще помогает - что-то вроде Java Freemarker или Velocity.

[ОБНОВЛЕНИЕ] Спасибо за ответы до сих пор - высоко ценится. Я действительно интересуюсь рекомендациями или историями войны, когда вы использовали эти библиотеки. Кажется, это лучший способ принять решение, не пытаясь каждый по очереди.

4b9b3361

Ответ 1

Вот еще пара:

О NVelocity, он был раздвоен ребятами замка, он разрабатывается здесь

Для писем мне никогда не нужно больше, чем NVelocity.

Ответ 2

Более полный список

  • ASP.Net встроенный механизм просмотра WebForm
  • ASPView
  • Брайл
  • NHaml (.Net порт Хамла)
  • Спарк
  • NVelocity
  • StringTemplate.Net

Ответ 3

Я бы рекомендовал CodeSmith Generator. Это генератор кода на основе шаблонов, с постоянными обновлениями и активным сообществом. Вот список шаблонов, которые поставляются с генератором CodeSmith.

Ответ 4

RazorEngine, механизм шаблонов, построенный на механизме синтаксического анализа Microsoft Razor.

https://github.com/Antaris/RazorEngine

Не использовал его, но я нахожу это интересным, потому что, если у вас есть фон ASP.NET MVC, вам не нужно будет изучать что-то новое.

Ответ 6

Я только что выпустил проект с открытым исходным кодом. Он ориентирован главным образом на шаблоны электронной почты, но вы можете использовать синтаксический анализатор самостоятельно, если хотите. Вы можете прочитать более подробную информацию и получить исходный код из моего блога.

http://thecodedecanter.wordpress.com/2010/07/19/town-crier-an-open-source-e-mail-templating-engine-for-net/

Ответ 7

Я думаю, что Mustache (http://mustache.github.com/) может поместиться и в счет.

Ответ 8

Некоторые тесты с 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.";
    }
}


}

и результаты:

результаты кода

Ответ 9

попробуйте следующее: Структура шаблона электронной почты http://www.bitethebullet.co.uk/Email_Template_Framework.aspx

Он отлично работает под ASP.NET и WinForms и все еще находится в активной разработке. Существует также очень хорошая документация и легко выкапывать в примерах.

Ответ 10

DotLiquid - очень приятная система шаблонов для .NET.

Он получен из Rubys Liquid Markup с требованиями .NET Framework 3.5 или выше.

Ответ 13

NVELOCITY, хотя он старый, последний релиз в 2003 году, достаточно.

Ответ 14

SharpTAL - автономный движок в активной разработке и без зависимостей, быстрый