你能推荐一个.net模板引擎吗?

我正在寻找一个.net模板引擎 – 一些简单,轻量,稳定,没有太多的依赖。 目前我所需要的是创build模板化纯文本和HTML电子邮件。 任何人都可以给我一个很好的build议?

如果它有帮助 – 就像Java的Freemarker或Velocity库一样。

[更新]感谢迄今为止的答案 – 非常感谢。 当你使用这些库的时候,我的build议和战争故事是真正的。 似乎是最好的方式做出决定,而不是每个轮stream尝试。

这里还有一些:

  • NHaml
  • 火花
  • Brail (可以单独使用)

关于NVelocity,它已经被城堡伙计分叉了,它正在这里开发

对于电子邮件,我从来不需要比NVelocity更多。

更完整的列表

  • ASP.Net内置WebForm视图引擎
  • ASPView
  • 抄网
  • NHaml(Haml的.Net端口)
  • 火花
  • NVelocity
  • StringTemplate.Net

我会推荐CodeSmith Generator 。 这是一个基于模板的代码生成器,具有持续更新和活跃的社区。 以下是CodeSmith Generator附带的模板列表 。

RazorEngine,一个build立在微软Razorparsing引擎上的模板引擎。

https://github.com/Antaris/RazorEngine

没有使用它,但我觉得很有趣,因为如果你有一个ASP.NET MVC背景,你将不需要学习新东西。

来自anltr.org的人也可以使用C#版本的 string模板 。

我刚刚发布了一个开源项目。 它主要针对电子邮件模板,但如果您愿意的话,您可以单独使用parsing器。 您可以阅读更多的细节,并从我的博客获取源代码。

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

下面是Handlebars,RazorEngine和SharpTAL的一些testing:

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模板系统。

它来源于Ruby的Liquid Markup,要求.NET Framework 3.5或更高版本。

你见过Velocity的.NET端口NVelocity吗? http://nvelocity.sourceforge.net/

NVELOCITY尽pipe已经很老了,但是在2003年最后一次发布,足够了。

SharpTAL – 独立引擎,主动开发,无需依赖,速度快

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>