.netテンプレートエンジン-依存関係が多すぎない、シンプルで軽量、安定したものを探しています。現時点で必要なのは、テンプレート化されたプレーンテキストとHTMLメールを作成することだけです。誰か私に良い推薦をしてもらえますか?
それがまったく役立つ場合-Javaの Freemarker または Velocity ライブラリのようなもの。
[更新]これまでの答えをありがとう-感謝します私は、これらのライブラリを使用したときからの推奨事項や戦争の話に本当に満足しています。それぞれを順番に試すことなく、意思決定を行うための最良の方法であると思われます。
さらに2つあります。
NVelocityについては、Castleの人たちによって分岐されており、開発中です here
メールの場合、NVelocity以上のものは必要なかった。
RazorEngine、MicrosoftのRazor解析エンジン上に構築されたテンプレートエンジン。
https://github.com/Antaris/RazorEngine
使ったことはありませんが、ASP.NET MVCの背景があれば、何か新しいことを学ぶ必要がないので、興味深いと思います。
より完全なリスト
CodeSmith Generator をお勧めします。これは、テンプレートベースのコードジェネレーターであり、定期的な更新とアクティブなコミュニティを備えています。これは、CodeSmith Generatorに同梱されている テンプレートのリスト です。
オープンソースプロジェクトをリリースしました。これは主に電子メールのテンプレート化を目的としていますが、必要に応じてパーサーを単独で使用することもできます。詳細を読んで、私のブログからソースコードを入手できます。
以下のハンドルバー、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.";
}
}
}
と結果:
Moustache(http://mustache.github.com/)もこの法案に合うかもしれません。
DotLiquid は、.NET用の非常に優れたテンプレートシステムです。
RubyのLiquid Markupから派生したもので、.NET Framework 3.5以上が必要です。
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>
これを試してください:メールテンプレートフレームワーク http://www.bitethebullet.co.uk/Email_Template_Framework.aspx
ASP.NETとWinFormsでうまく機能し、現在も活発に開発が進んでいます。非常に素晴らしいドキュメントがあり、例を簡単に掘り下げることができます。
SharpTAL -アクティブな開発で依存関係のないスタンドアロンエンジン、高速
Velocityの.NETポートであるNVelocityを見たことがありますか? http://nvelocity.sourceforge.net/
NVELOCITY、それは古いですが、2003年の最後のリリースで十分です。