Как последовательно получить базовый путь для проекта ASP.NET 5 DNX как в производственной среде, так и в среде разработки?
Я развернул сайт ASP.NET MVC 6 для Azure с Git. Подробности о развертывании можно найти в этом сообщении в блоге, но в основном я использую DNU для публикации, а затем kudu, чтобы нажать его на сайт Azure.
Используя IHostingEnvironment
, я получаю ApplicationBasePath. Проблема в том, что пути, которые я возвращаю, очень разные на localhost и на Azure.
Azure: "D:\home\site\approot\src\src"
Localhost: "C:\Users\deebo\Source\mysite\site\src"
Я хочу использовать базовый путь для получения полного пути к папке, содержащей некоторые изображения: wwwroot/img/gallery/
Я обошел это со следующим кодом:
var rootPath = _appEnvironment.ApplicationBasePath;
var pathFix = "../../../";
if(_hostingEnvironment.IsDevelopment())
{
pathFix = string.Empty;
}
var imagesPath = Path.Combine(rootPath, pathFix, "wwwroot", "img", "gallery");
Это может работать, но кажется взломанным.
Возможно ли, что мой метод развертывания влияет на это?
Есть ли более последовательный способ получить путь к приложению?
Ответы
Ответ 1
Вы можете использовать IHostingEnvironment.WebRootPath
. Из глубокого погружения Asp 5 :
Службы IHostingEnvironment
предоставляют вам доступ к корневому пути Web для вашего приложения (обычно это ваша папка www), а также IFileProvider абстракции для вашего веб-корня.
Таким образом, вы можете получить путь wwwroot или даже напрямую сопоставить путь:
var wwwrootPath = env.WebRootPath;
var imagesPath = hostingEnv.MapPath("img/gallery");
PS. Я пробовал это локально, а не на Azure. Однако я не нашел упоминания о проблемах в Azure. В этом ответе даже упоминается, что в Azure IHostingEnvironment.WebRootPath
указывается на D:/Home/site/wwwroot
.