Подтвердить что ты не робот

Как последовательно получить базовый путь для проекта 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");

Это может работать, но кажется взломанным.

Возможно ли, что мой метод развертывания влияет на это?
Есть ли более последовательный способ получить путь к приложению?

4b9b3361

Ответ 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.