Получение правильного абсолютного пути в библиотеке, используемой веб-проектом - PullRequest
1 голос
/ 02 марта 2009

У меня есть проект asp.net mvc, который использует несколько методов поиска в отдельной библиотеке. Эта библиотека должна знать расположение моих индексных файлов lucene.

    private static string lucenePath = ConfigurationManager.AppSettings["lucenePath"];

    public static ColorList SearchColors(Query query) {
        return new ColorList(
            new IndexSearcher(Path.GetFullPath(lucenePath)),
            query);
    }

Это правильно читает мой сконфигурированный lucenePath из ключевого узла приложения web.config. Но как я могу получить правильный полный путь от этого относительного пути? Path.GetFullPath дает мне совершенно неверный путь.

- Вывод -
Если вы хотите добиться полного успеха, ответ tvanfosson , вероятно, для вас.
Я, тем не менее, держал его немного мертвым, используя следующее:

Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
    ConfigurationManager.AppSettings["luceneIndex"].TrimStart('\\'));

Это будет искать в app.config вызывающего абонента ключ приложения, называемый «путь», и объединять его значение с путем вызывающего. TrimStart () гарантирует, что файл конфигурации может содержать начальный \ или нет.

Ответы [ 2 ]

1 голос
/ 02 марта 2009
Server.MapPath(string);
0 голосов
/ 02 марта 2009

Поскольку вы ссылаетесь на это из отдельной библиотеки, вам, возможно, придется перепрыгнуть через кучу обручей, чтобы получить доступ к HttpServerUtitity или ввести некоторую связь с классами, которые трудно подделать. Возможно, вы захотите иметь один класс конфигурации, который загружает свойства из веб-конфигурации, которые вставляются в вашу библиотеку через конструктор / установщик. Чтобы упростить тестирование, вы можете определить интерфейс, который можно смоделировать в ваших модульных тестах, и заставить его реализовать это. Класс конфигурации может использовать HttpServerUtility для получения абсолютного пути и его внутреннего хранения для повторного использования.

...