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

Posted

技术标签:

【中文标题】如何在生产和开发环境中始终如一地获得 ASP.NET 5 DNX 项目的应用程序基础路径?【英文标题】:How to consistently get application base path for ASP.NET 5 DNX project on both production and development environment? 【发布时间】:2015-09-17 13:06:19 【问题描述】:

我已从 Git 将 ASP.NET MVC 6 网站部署到 Azure。部署的详细信息可以在this blog post 找到,但基本上我使用 DNU 发布它,然后使用 kudu 将其推送到 Azure 网站。

使用IHostingEnvironment 我得到了ApplicationBasePath。问题是我返回的路径在 localhost 和 Azure 上非常不同。

Azure:“D:\home\site\approot\src\src” 本地主机:“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");

这可能有效,但看起来很老套。

我的部署方法会对此产生影响吗? 有没有更一致的方式获取应用路径?

【问题讨论】:

你想对应用程序路径做什么?它如何影响您的应用程序? 我想使用基本路径来获取包含一些图像的文件夹的完整路径:wwwroot/img/gallery。将此添加到问题中。路径也可以在代码中看到。感谢您帮助我使我的问题更清楚 【参考方案1】:

您可以使用IHostingEnvironment.WebRootPath。来自 Asp 5 deep dive:

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

这样就可以获取wwwroot路径,甚至可以直接映射路径:

var wwwrootPath = env.WebRootPath;
var imagesPath = hostingEnv.MapPath("img/gallery");

附言。我在本地尝试过,而不是在 Azure 上。但是我没有发现任何关于 Azure 问题的提及。 This answer 甚至提到在 Azure 中 IHostingEnvironment.WebRootPath 将指向 D:/Home/site/wwwroot

【讨论】:

谢谢,这正是我想要的。在 Windows 和 Mac 本地主机以及 Azure 上工作。 很好,很高兴知道它适用于各种环境! 很棒的信息; (至少从 ASP.NET Core 1.0.0-RC2 开始)您可以通过使用此类型的参数声明该控制器的构造函数来从任何控制器获取对 IHostingEnvironment 实例的引用;例如,public HomeController(IHostingEnvironment env) ... 这也是您获取应用程序的ContentRootPath 的方式,用于您在可公开访问的WebRootPath 之外打包的任何内容。正如 mklement0 所提到的,依赖注入是获取 IHostingEnvironment 的好方法,其中还包括应用程序是在 Dev 还是 Prod 中运行等信息。

以上是关于如何在生产和开发环境中始终如一地获得 ASP.NET 5 DNX 项目的应用程序基础路径?的主要内容,如果未能解决你的问题,请参考以下文章

如何更好地设置Laravel项目的生产环境设置?

如何构建一个成功的Cloud Native生产运维框架?

如何最有效地编写SQL

如何在JDK1.8中愉快地处理日期和时间

严重的测试环境

尽管在沙盒环境中工作良好,但我无法在生产环境中获得令牌