Как можно заставить 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

Но эта страница пропускает (казалось бы) самый важный момент - как устанавливать свойства и что их устанавливать.

Я просто хочу загрузить простой шаблон из файла.


person Deane    schedule 27.03.2009    source источник


Ответы (2)


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

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

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

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

Страница загрузки проекта Castle

person Deane    schedule 29.03.2009

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

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 {
        }
  }
person jurujen    schedule 11.06.2012