我无法让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
但是这个页面跳过(看似)最重要的一点 - 如何设置属性以及将它们设置为什么。
我只是想从文件中加载一个简单的模板。
答案 0 :(得分:2)
这是我发现的 -
我使用的是原始的NVelocity库,自2003年以来一直没有更新。我认为这是一个死的项目。
我切换到Castle Project版本,它更容易 - 事实上,它的运行方式与我链接的页面上的示例非常相似。它似乎为属性设置了智能默认值。我可以在没有设置任何属性的情况下对其进行初始化,但模板目录默认为“。”,所以我通常设置一个(在运行“init”之前执行)。
要获取正确的DLL,您需要下载最新的NVelocity版本(截至撰写本文时为1.1)。
答案 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 {
}
}