你能推荐一个.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器。 您可以阅读更多的细节,并从我的博客获取源代码。
下面是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/
http://csharp-source.net/open-source/template-engines
http://joel.net/code/dotnet_templates.aspx
希望这可以帮助!!!
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>