27

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

您是否仍会建议为此目的使用 NVelocity,或者您能提出任何替代方案吗?

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

4

10 回答 10

27

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

如果您正在寻找替代方案,那么我建议您使用ASP.Net MVC3 或Spark View Engine的Razor 视图引擎。

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

于 2009-03-30T21:29:59.513 回答
3

您可以独立使用 brail 或 naml 来生成 html 电子邮件。

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

我使用 NHAML 生成 XPS 文档,以便从 win forms 应用程序打印和报告。

如果它必须是文本也许http://www.stringtemplate.org/

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

于 2009-04-01T10:07:35.677 回答
3

我没有理由不使用 NVelocity(Castle 项目分支)。它很稳定,您的特定需求(电子邮件模板)可能不像其他使用 NVelocity 的项目那样复杂,因此您不应该期待任何问题。

于 2009-04-26T17:40:37.017 回答
3

codeplex上有项目。

http://www.codeplex.com/NVelocity

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

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

创建 CodePlex 项目的人(用户名:TerryLiang)也在 8 月份从 nLucene 创建了一个。对于那个项目,从那时起他已经进行了大约 50 次签到,所以也许他正计划在那个项目上做一些认真的工作。

于 2009-10-16T06:51:30.413 回答
3

NVelocity 没有任何问题,只是很难找到该项目的最新版本。谷歌通常会首先找到旧的 sourceforge 链接,其次是 codeplex 链接。正如 Pervez Choudhury 所说,获得它的地方是城堡。我们在工作中使用 Castle 版本的 NVelocity,它很棒。

自从第一次提出这个问题以来,多年来出现了另一种选择,那就是微软的 T4。大多数人认为 T4 是一个预编译生成器,因为它最初是这样发布的,但实际上您现在可以使用它来生成生成器类并在运行时进行动态生成。它被称为预处理的 T4 模板,您可以在此处阅读有关它的更多信息。优点是它已经内置在 Visual Studio 中,因此您无需执行任何特殊操作即可开始使用。

于 2011-04-29T00:14:13.030 回答
3

由于 NVelocity 似乎(再次)死了,我建议DotLiquid。目前不能说太多,因为我仍在评估它,但它确实看起来很有希望(并且构建为我所关心的 MonoTouch/MonoDroid 库)。

更新[2012 年 6 月 11 日]

将“安全”类/集合作为模型的限制可能是令人头疼的主要来源。在评估此引擎时,您可能希望从这一点开始。

于 2012-06-07T13:05:31.443 回答
2

我同意西蒙的观点;http://www.stringtemplate.org/非常好,设计得很好,并且正在积极维护中。

于 2009-11-03T21:20:45.947 回答
2

我不能为DotLiquid 投票给 Sorin ,所以只想添加我的评论 - 这似乎是一个正在积极开发的伟大平台。

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

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

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

StringTemplate 也是个好东西,但是太严格和限制,模板太纯 View 用起来不实用……

于 2012-06-28T17:31:00.267 回答
1

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

于 2009-04-08T15:34:11.863 回答
0

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

于 2009-03-31T13:32:31.727 回答