NVelocity项目已经死了吗?还有替代品吗?

时间:2009-03-30 21:22:23

标签: .net templates template-engine nvelocity

我正在寻找.NET / C#的模板引擎来在我的应用程序中生成电子邮件通知。我过去读过NVelocity并认为它符合我的需求,但似乎这个项目已经死了。

您是否仍然建议将NVelocity用于此目的,或者您可以建议任何替代方案吗?

注意:我发现了一些其他模板引擎,但这些引擎主要是ASP.NET MVC(Brail,NHaml等)的“视图引擎”。但我认为这些并不是我想要的。

10 个答案:

答案 0 :(得分:27)

Castle Project分叉了该项目,并一直在维护它,最近于2010年12月10日发布了1.1.1版。更多细节可以在the Castle Projects NVelocity site找到。他们还对其进行了一些改进,详细信息可以在on their NVelocity improvements页面找到。该项目看起来已经死了,在MonoRail 3中,它已经被基于Razor的Castle Blade所取代。

如果您正在寻找替代方案,那么我建议使用ASP.Net MVC3中的Razor view engineSpark View Engine

开源项目RazorEngine允许您使用ASP.Net MVC或网页之外的Razor View引擎,以便您可以使用它来生成模板化电子邮件。

答案 1 :(得分:3)

您可以使用brail或nhaml独立版来生成HTML电子邮件。

nhaml的核心(不确定brail ??)没有对MVC或ASP的引用。

我已经使用nhaml生成XPS文档,以便从win表单应用程序进行打印和报告。

如果必须是文字http://www.stringtemplate.org/

这是一个类似的问题How to use Brail as a stand-alone general purpose templating engine (like NVelocity)?

答案 2 :(得分:3)

我没有看到不使用NVelocity(Castle项目分叉)的理由。它是稳定的,您的特定需求(电子邮件模板)可能没有使用NVelocity的其他项目那么复杂,所以您不应该期待任何问题。

答案 3 :(得分:3)

codeplex上有项目。

http://www.codeplex.com/NVelocity

项目描述: NVelocity是一个非常有道理的开源java模板工程的端口 框架,速度1.6。 NVelocity是一个用C#编写的纯.Net库,目前以C#为目标 框架版本3.5。

签入的初始源代码似乎是直接的 svn.castleproject.org。

创建CodePlex项目的人(用户名:TerryLiang)也是 从nLucene在八月创建了一个。对于那个项目,他有 从那时起约有50张签到,所以也许他打算做一些 该项目的认真工作。

答案 4 :(得分:3)

除了很难找到最新版本的项目之外,NVelocity没有任何问题。 Google通常会将旧的sourceforge链接作为第一个匹配,而codeplex链接是下一个最常见的链接。得到它的地方是来自Castle的Pervez Choudhury提到的。我们在工作中使用Castle版本的NVelocity,这很棒。

自从第一次提出这个问题以来,出现了另一种选择,那就是微软的T4。大多数人认为T4是预编译生成器,因为它是第一次发布的,但实际上你现在可以用它来生成生成器类并在运行时进行动态生成。它被称为预处理的T4模板,您可以阅读更多相关信息here。它的优点是它已经内置在Visual Studio中,所以你不需要做任何特别的事情就可以了。

答案 5 :(得分:3)

由于NVelocity似乎已经死亡(再次),我建议DotLiquid。现在不能说很多,因为我还在评估它,但它确实看起来很有前途(并建立MonoTouch / MonoDroid库以满足我的需求)。

更新 [2012年6月11日]

将“安全”类/集合作为模型的约束可能是头痛的主要原因。在评估此引擎时,您可能希望从这一点开始。

答案 6 :(得分:2)

我同意西蒙的意见; http://www.stringtemplate.org/非常出色,设计精良,并且得到了积极的维护。

答案 7 :(得分:2)

我无法为DotLiquid提升索林,所以只想添加我的评论 - 这似乎是一个积极开发的好平台。

并且它们具有trunk版本中的功能(不在已发布的dll中),如果以这种方式注册,则可以使用pocos而无需从任何基类继承:

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

这解决了索林提到的头痛问题。

StringTemplate也是一件很棒的事情,但是太严格和限制,模板太纯粹了,而且使用起来很不实际......

答案 8 :(得分:1)

您可以使用IKVM将其转换为程序集,从而在.Net中使用原始(且经常更新)的Velocity Java版本。我用这种方式成功地使用了速度来生成.Net下的代码。你也可以看一下StringTemplate。有StringTemplate的java和C#版本。您可以在.Net here中找到关于使用Velocity的快速小型教程。我建议你仔细看看StringTemplate,因为我认为它是一个更干净的模板引擎(我是最近的转换)。

答案 9 :(得分:0)

我建议使用XSLT进行模板化。是的,它需要更多的时间来学习技术,但是你有比其他任何东西更灵活的模板解决方案。