如何在生产和开发环境中始终如一地获取ASP.NET 5 DNX项目的应用程序基础路径?

Dev*_*iss 11 c# azure asp.net-core-mvc dnx

我已经从Git向Azure部署了一个ASP.NET MVC 6网站.有关部署的详细信息可以在这篇博客文章中找到,但基本上我使用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");
Run Code Online (Sandbox Code Playgroud)

这可能有用,但看起来很黑.

我的部署方法是否可能对此产生影响?
是否有更一致的方法来获取应用程序路径?

Dan*_*.G. 19

你可以使用IHostingEnvironment.WebRootPath.从Asp 5 深潜:

这些IHostingEnvironment服务使您可以访问应用程序的Web根路径(通常是您的www文件夹)以及Web根目录的IFileProvider抽象.

所以你可以获得wwwroot路径甚至直接映射路径:

var wwwrootPath = env.WebRootPath;
var imagesPath = hostingEnv.MapPath("img/gallery");
Run Code Online (Sandbox Code Playgroud)

PS.我在本地尝试过,而不是在Azure上.但是我没有发现有关Azure中的问题的任何提及.这个答案甚至提到Azure中IHostingEnvironment.WebRootPath会指出D:/Home/site/wwwroot.

  • 好消息; (至少从ASP.NET Core 1.0.0-RC2开始),您可以通过声明控制器的构造函数具有此类型的参数来从任何控制器获取对"IHostingEnvironment"实例的引用.例如,`public HomeController(IHostingEnvironment env){...` (4认同)