У меня возникли трудности с использованием NVelocity в приложении ASP.NET MVC. Я использую его как способ создания электронных писем.
Насколько я могу разобрать, все детали, которые я передаю, верны, но не удается загрузить шаблон.
Вот код:
private const string defaultTemplatePath = "Views\\EmailTemplates\\";
...
velocityEngine = new VelocityEngine();
basePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, defaultTemplatePath);
ExtendedProperties properties = new ExtendedProperties();
properties.Add(RuntimeConstants.RESOURCE_LOADER, "file");
properties.Add(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, basePath);
velocityEngine.Init(properties);
BasePath - это правильный каталог, я вставил значение в проводник, чтобы убедиться, что оно правильное.
if (!velocityEngine.TemplateExists(name))
throw new InvalidOperationException(string.Format("Could not find a template named '{0}'", name));
Template result = velocityEngine.GetTemplate(name);
"name" выше - это допустимое имя файла в папке, определенной как basePath выше. Однако TemplateExists возвращает false. Если я прокомментирую это условное выражение и позволю ему потерпеть неудачу при вызове метода GetTemplate, трассировка стека будет выглядеть так:
at NVelocity.Runtime.Resource.ResourceManagerImpl.LoadResource(String resourceName, ResourceType resourceType, String encoding)
at NVelocity.Runtime.Resource.ResourceManagerImpl.GetResource(String resourceName, ResourceType resourceType, String encoding)
at NVelocity.Runtime.RuntimeInstance.GetTemplate(String name, String encoding)
at NVelocity.Runtime.RuntimeInstance.GetTemplate(String name)
at NVelocity.App.VelocityEngine.GetTemplate(String name)
...
Я сейчас в тупике. Я чувствую, что ответ ослепляюще очевиден, но сейчас я просто не вижу его.