NVelocityメモ

The trick is to set file.resource.loader.path. Here's how to load C:\foo\bar\somefile.vm:

 ExtendedProperties props = new ExtendedProperties();
 props.AddProperty("file.resource.loader.path", new ArrayList(new string[]{".", "C:\\"}));
 velocity.Init(props);

 template = velocity.GetTemplate("foo\\bar\\somefile.vm");

ASP.NETNVelocityを使おうとしてハマった。テンプレートエンジンNVelocityを活用してテキストを生成する:CodeZineUsing NVelocity :: Castle Projectを参考にしたが、NVelocity.Exception.ResourceNotFoundException「Unable to find resource 'foo\\bar\\somefile.vm'」のようなエラーが出る。
上記の方法で絶対パスを指定すると動くようだ。

VelocityEngine velocity = new VelocityEngine();
ExtendedProperties props = new ExtendedProperties();
props.AddProperty("file.resource.loader.path", "C:\\");
velocity.Init(props);
try {
    Template template = velocity.GetTemplate("foo\\bar\\somefile.vm");
    VelocityContext ctx = new VelocityContext();
    ctx.Put("foobar", "baz");
    StringWriter sw = new StringWriter();
    template.Merge(ctx, sw);
    Debug.WriteLine(sw.GetStringBuilder().ToString());
    sw.Close();
} catch (ResourceNotFoundException ex) {
    Debug.WriteLine("テンプレートファイルが見つかりませんでした");
} catch (ParseErrorException ex) {
    Debug.WriteLine("テンプレートの解析時にエラーが発生しました");
}