2009-03-27 2 views
2

Я не могу заставить 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

Вот что я узнал -

Я использовал оригинальную библиотеку NVelocity, которая не имела обновления с 2003 года, я думаю, что это мертвый проект.

Я переключился на версию проекта Castle, и это намного проще - на самом деле это работает так же, как и примеры на странице, с которой я связан. Кажется, он устанавливает интеллектуальные значения по умолчанию для свойств. Я могу инициализировать его без каких-либо свойств, но каталог шаблонов по умолчанию имеет значение «.», Поэтому я обычно устанавливаю его (сделайте это до с запуском «init»).

Для того чтобы получить нужную DLL-версию, вам необходимо скачать последнюю версию NVelocity (начиная с этой записи - 1.1).

Castle Project Download Page

0

Вам необходимо включить следующие файлы в сборке, и убедитесь, что их тип установлен в «Ресурс»

src\Runtime\Defaults\directive.properties 

src\Runtime\Defaults\nvelocity.properties 

Затем они будут найдены ResourceLocator

src\Runtime\Resource\Loader\ResourceLocator.cs 

Если вы получили исключение на GetManifestResourceNames(), как это было при попытке запустить Dvsl, попробуйте изменить конструктор ResourceLocator на ca tch и игнорировать ошибку, так как требуемые файлы находятся в вашей локальной сборке (если вы включили их выше), и исключение вызывается только внешними сборками (не знаю почему).

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 { 
     } 
    } 
Смежные вопросы