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

StackOverflow https://stackoverflow.com/questions/602265

  •  03-07-2019
  •  | 
  •  

Вопрос

У меня есть проект 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.Но как я могу получить правильный полный путь из этого относительного пути?Путь.GetFullPath выдает мне совершенно неверный путь.

--Заключение--
Если вы хотите выложиться по полной программе, тванфоссонэтот ответ, вероятно, предназначен для вас.
Я, однако, сохранил его немного более безмозглым, используя следующее:

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

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

Это было полезно?

Решение

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

Другие советы

Server.MapPath(string);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top