NVelocity项目是否已经停止更新?有没有替代方案?

27

我正在寻找一个能够生成我的应用程序中的电子邮件通知的 .NET/C# 模板引擎。我以前听说过 NVelocity,认为它符合我的需求,但似乎这个项目已经停止更新了。

你是否仍然推荐使用 NVelocity,或者你能否建议其他替代方案?

注意:我找到了一些其他的模板引擎,但这些大多数是 ASP.NET MVC 的 "视图引擎"(如 Brail、NHaml 等)。但我认为这些并不是我要找的。

10个回答

27
The Castle项目分叉了该项目并一直在维护,最近于2010年12月10日发布了1.1.1版本。更多详细信息请参见Castle Projects NVelocity网站。他们还进行了许多改进,详细信息可以在NVelocity改进页面中找到。该项目看起来已经死亡,在MonoRail 3中,它已被基于Razor的Castle Blade所取代。
如果您正在寻找替代方案,那么我建议使用ASP.Net MVC3的Razor视图引擎Spark View Engine
开源项目RazorEngine允许您在ASP.Net MVC或Web页面以外使用Razor View引擎,因此您可以使用它来生成模板化电子邮件。

Castle在2010年12月发布了NVelocity版本。 - mattmc3
我正在使用ASP.NET 2.0,并需要一个模板库。我应该选择原始的NVelocity,还是有一个与ASP.NET 2.0兼容(不是MVC 2!)的好替代品? - Web User
你好,@Earlz,它并没有死亡,我看到最近21天有更改。我已更新链接。 - DaFi4
我可以看到,NVelocity似乎基于早于v1.6的引擎版本!它不支持像“and”这样的文本运算符。 - DaFi4

3
除了最新版本的项目比较难找到之外,NVelocity 没有任何问题。通常情况下,谷歌搜索会将旧的 SourceForge 链接排在第一位,而 CodePlex 链接则是次常见的链接。获取 NVelocity 的方法如 Pervez Choudhury 所提到的那样,从 Castle 获取即可。我们在工作中使用的是 Castle 版本的 NVelocity,非常好用。
自这个问题被首次提出以来,出现了另一种选择,那就是 Microsoft 的 T4。大多数人认为 T4 是一个预编译生成器,因为它最初是以这种方式发布的,但实际上你现在可以使用它来生成生成器类并在运行时进行动态生成。这称为预处理的 T4 模板,你可以在 此处 了解更多信息。优点是它已经集成到 Visual Studio 中,因此您无需采取任何特殊措施即可开始使用。

NVelocity出了一些问题,实际上,最新版本的NVelocity只支持大约v1.5的Velocity功能集,这意味着它不支持文本运算符,如使用"and"代替"&&"和"or"代替"||"。 - DaFi4

3

3

我认为使用NVelocity(Castle项目的分支)没有任何不妥之处。它是稳定的,而且你的具体需求(电子邮件模板)可能并不像其他使用NVelocity的项目那么复杂,因此你不应该期望出现任何问题。


3

有一个在CodePlex上的项目。

http://www.codeplex.com/NVelocity

项目描述: NVelocity是非常流行的开源Java模板引擎框架Velocity 1.6的移植版。 NVelocity是一个纯粹的.Net库,用C#编写,目前针对Framework版本3.5。

最初的源代码似乎直接来自svn.castleproject.org。

创建CodePlex项目(用户名:TerryLiang)的人也于去年8月创建了nLucene项目。 对于那个项目,他自那时以来已经进行了大约50次代码提交,因此可能他计划在该项目上进行一些重要工作。


我看到了“此网站包含有害程序!”的警告信息,如果我进入该网站,我看到“未找到'NVelocity'项目”的消息。 - sergiol

3

由于NVelocity似乎又挂了,我建议使用DotLiquid。目前还在评估中,但它看起来很有前途(并且作为MonoTouch/MonoDroid库构建)。

更新 [2012年6月11日]

拥有“安全”类/集合作为模型的限制可能是一种主要的头痛源。在评估此引擎时,您可能需要从这一点开始。


2

我不能为DotLiquid的Sorin投赞成票,所以只想添加我的评论——它似乎是一个正在积极开发的优秀平台。

而且,如果您以这种方式注册它们,使用主干版本(而不是发布的dll中)的功能,您可以无需继承任何基类就可以使用pocos:

foreach (var type in {Assembly}.GetTypes())
    Template.RegisterSafeType(type, type.GetProperties().Select(p => p.Name).ToArray());

这解决了Sorin提到的问题。

StringTemplate也是一个很好的东西,但太严格和限制性了,模板太过纯净,只能用于视图,实际使用起来并不实用...


2

1

你可以使用IKVM将原始(并经常更新的)Java版本的Velocity转换为程序集,从而在.Net中使用它。我已成功地使用这种方式在.Net下进行代码生成。您还可以查看StringTemplate。有java和C#版本的StringTemplate。您可以在此处找到有关在.Net中使用Velocity的快速迷你教程。然而,我建议您仔细研究StringTemplate,因为我认为它是一个更清晰的模板引擎(我最近成为了它的拥趸)。


0
我会推荐使用XSLT来进行模板化。是的,学习这项技术可能需要花费一些时间,但是你将拥有比其他任何解决方案更加灵活的模板解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接