当您部署 asp.net5/mvc6 应用程序时,有一个 wwwroot 文件夹,其中包含 css、js、图像等 Web 资源,还有一个 approot 文件夹,其中包含包和源代码。
例如,Microsoft.Framework.Configuration 命名空间中的类似乎必须能够从 approot 下面读取文件,因为那是 config.json 文件所在的位置。
我想知道的是,是否可以在approot中存储和读取我自己的自定义文件?如果是这样怎么办?
例如,我没有使用实体框架,所以我需要一个地方来放置 sql 安装和升级脚本,并且不希望将它们放在 wwwroot 下。我还有用于导航站点地图之类的自定义配置文件,如果可以将它们放在其他地方(例如 approot),我宁愿不将它们放在 wwwroot 之下。
我知道我可以使用 IHostingEnvironment env.MapPath("~/somefileinwwwrootfoilder.json") 访问 wwwroot 下面的文件
有没有类似的方法来访问approot下的文件?
接受的答案是正确的,但自从 ASP.NET Core 1.0 发布以来,一些事情发生了变化,所以我想我应该写一个新的清晰的东西。
我所做的是在我的项目中创建一个名为AppData
。您可以随意称呼它。
Note: it's not in wwwroot
因为我们希望将这些数据保密。
接下来,您可以使用IHostingEnvironment
访问文件夹路径。这个接口可以作为依赖项注入到某种帮助服务中,最终得到的结果是这样的:
public class AppDataHelper
{
private readonly IHostingEnvironment _hostingEnvironment;
private const string _appDataFolder = "AppData";
public AppDataHelper(IHostingEnvironment hostingEnvironment)
{
_hostingEnvironment = hostingEnvironment;
}
public async Task<string> ReadAllTextAsync(string relativePath)
{
var path = Path.Combine(_hostingEnvironment.ContentRootPath, _appDataFolder, relativePath);
using (var reader = File.OpenText(path))
{
return await reader.ReadToEndAsync();
}
}
}
此外,为了让事情正确部署,我必须添加AppData
文件夹到publishOptions
include
列出在project.json
.
正如评论中提到的,部署AppData
文件夹正确地位于ASP.NET MVC 核心 2 (using *.csproj
文件,而不是project.json
),语法如下:
<ItemGroup>
<None Include="AppData\*" CopyToPublishDirectory="PreserveNewest" />
</ItemGroup>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)