2

我无法让 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

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

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

4

2 回答 2

2

这是我发现的——

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

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

要获得正确的 DLL,您需要下载最新的 NVelocity 版本(在撰写本文时它是 1.1)。

城堡项目下载页面

于 2009-03-29T05:33:19.337 回答
0

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

src\Runtime\Defaults\directive.properties

src\Runtime\Defaults\nvelocity.properties

然后这些将由 ResourceLocator 找到

src\Runtime\Resource\Loader\ResourceLocator.cs

如果您GetManifestResourceNames()在尝试运行 Dvsl 时遇到异常,请尝试修改 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 {
        }
  }
于 2012-06-11T12:00:30.727 回答