如何让NVelocity正确初始化?

时间:2009-03-27 03:46:36

标签: nvelocity

我无法让NVelocity初始化。我不是要做任何复杂的事情,所以如果它以默认值初始化它就好了,但它甚至都不会这样做。

此:

VelocityEngine velocity = new VelocityEngine();
ExtendedProperties props = new ExtendedProperties();
velocity.Init(props);

结果:“似乎没有将类指定为ResourceManager ...”

这样做:

VelocityEngine velocity = new VelocityEngine();
velocity.Init();

我可以找到关于属性应该是什么的珍贵文档,以及如何使用简单的默认值初始化它。任何人都可以指向资源吗?

许多网页都指向此页:

http://www.castleproject.org/others/nvelocity/usingit.html

但是这个页面跳过(看似)最重要的一点 - 如何设置属性以及将它们设置为什么。

我只是想从文件中加载一个简单的模板。

2 个答案:

答案 0 :(得分:2)

这是我发现的 -

我使用的是原始的NVelocity库,自2003年以来一直没有更新。我认为这是一个死的项目。

我切换到Castle Project版本,它更容易 - 事实上,它的运行方式与我链接的页面上的示例非常相似。它似乎为属性设置了智能默认值。我可以在没有设置任何属性的情况下对其进行初始化,但模板目录默认为“。”,所以我通常设置一个(在运行“init”之前执行)。

要获取正确的DLL,您需要下载最新的NVelocity版本(截至撰写本文时为1.1)。

Castle Project Download Page

答案 1 :(得分:0)

您需要在程序集中包含以下文件,并确保其类型设置为“资源”

src\Runtime\Defaults\directive.properties

src\Runtime\Defaults\nvelocity.properties

然后可以通过ResourceLocator

找到这些内容
src\Runtime\Resource\Loader\ResourceLocator.cs

如果你在尝试运行Dvsl时在GetManifestResourceNames()上得到异常,那么尝试修改ResourceLocator构造函数以捕获并忽略错误,因为所需文件在本地程序集中(如果你在上面包含它们)并且只有外部程序集抛出异常(不知道为什么)。

    foreach(Assembly a in assemblies) {
        String prefix = a.FullName.Substring(0,a.FullName.IndexOf(",")).ToLower();
        try
        {
            String[] names = a.GetManifestResourceNames();
            foreach (String s in names)
            {
                if (s.ToLower().Equals(fn) || s.ToLower().Equals(prefix + "." + fn))
                {
                    this.filename = s;
                    assembly = a;
                    isResource = true;
                }
            }
        } catch {
        }
  }