Получение правильного абсолютного пути в библиотеке, используемой веб-проектом
-
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);