web-dev-qa-db-ja.com

.netテンプレートエンジンを推奨できますか?

.netテンプレートエンジン-依存関係が多すぎない、シンプルで軽量、安定したものを探しています。現時点で必要なのは、テンプレート化されたプレーンテキストとHTMLメールを作成することだけです。誰か私に良い推薦をしてもらえますか?

それがまったく役立つ場合-Javaの Freemarker または Velocity ライブラリのようなもの。

[更新]これまでの答えをありがとう-感謝します私は、これらのライブラリを使用したときからの推奨事項や戦争の話に本当に満足しています。それぞれを順番に試すことなく、意思決定を行うための最良の方法であると思われます。

49
serg10

さらに2つあります。

NVelocityについては、Castleの人たちによって分岐されており、開発中です here

メールの場合、NVelocity以上のものは必要なかった。

21

RazorEngine、MicrosoftのRazor解析エンジン上に構築されたテンプレートエンジン。

https://github.com/Antaris/RazorEngine

使ったことはありませんが、ASP.NET MVCの背景があれば、何か新しいことを学ぶ必要がないので、興味深いと思います。

6
CGK

より完全なリスト

  • ASP.Net組み込みWebFormビューエンジン
  • ASPView
  • 手すり
  • NHaml(Hamlの.Netポート)
  • Spark
  • NVelocity
  • StringTemplate.Net
5
Palani

CodeSmith Generator をお勧めします。これは、テンプレートベースのコードジェネレーターであり、定期的な更新とアクティブなコミュニティを備えています。これは、CodeSmith Generatorに同梱されている テンプレートのリスト です。

5
KellyCoinGuy

文字列テンプレート anltr.orgの人々から C#バージョンも で。

3
kenny

オープンソースプロジェクトをリリースしました。これは主に電子メールのテンプレート化を目的としていますが、必要に応じてパーサーを単独で使用することもできます。詳細を読んで、私のブログからソースコードを入手できます。

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

2
Oenotria

以下のハンドルバー、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.";
    }
}


}

と結果:

code results

2
Nigrimmist

Moustache(http://mustache.github.com/)もこの法案に合うかもしれません。

2
mp31415

DotLiquid は、.NET用の非常に優れたテンプレートシステムです。

RubyのLiquid Markupから派生したもので、.NET Framework 3.5以上が必要です。

1
dns

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>
1
Max Toro

これを試してください:メールテンプレートフレームワーク http://www.bitethebullet.co.uk/Email_Template_Framework.aspx

ASP.NETとWinFormsでうまく機能し、現在も活発に開発が進んでいます。非常に素晴らしいドキュメントがあり、例を簡単に掘り下げることができます。

1
binball

SharpTAL -アクティブな開発で依存関係のないスタンドアロンエンジン、高速

0
rlacko

Velocityの.NETポートであるNVelocityを見たことがありますか? http://nvelocity.sourceforge.net/

0
MattValerio

NVELOCITY、それは古いですが、2003年の最後のリリースで十分です。

0
Tredency
0
Samiksha