Joe*_*tte 10 asp.net-core-mvc asp.net-core
当您部署asp.net5/mvc6应用程序时,有一个wwwroot文件夹,其中包含css,js,images等Web资源,并且有一个包和源代码所属的approot文件夹.例如,Microsoft.Framework.Configuration命名空间中的类似乎必须能够从下面的approot读取文件,因为这是config.json文件所在的位置.
我想知道的是,是否可以在Approot中存储和读取我自己的自定义文件?如果是这样怎么样?
例如,我没有使用实体框架,所以我需要一个地方放置sql安装和升级脚本,并且不希望将它们放在wwwroot下面.我也有导航站点地图等自定义配置文件,如果可以将它们放在别处,例如approot,我宁愿不放在wwwroot下面.
我知道我可以使用IHostingEnvironment env.MapPath("〜/ somefileinwwwrootfoilder.json")访问wwwroot下面的文件
有没有类似的方法来访问approot下的文件?
cra*_*mes 11
接受的答案是正确的,但是自从ASP.NET Core 1.0发布后,一些事情发生了变化,所以我想我会写一些新的清晰的东西.
我所做的是在我的项目中创建一个名为的文件夹AppData.你可以随便叫它.
注意:它不在,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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
此外,为了正确部署,我必须将AppData文件夹添加到publishOptions include列表中project.json.
如评论中所述,要AppData在ASP.NET MVC Core 2中正确部署文件夹(使用*.csproj文件而不是project.json),语法如下:
<ItemGroup>
<None Include="AppData\*" CopyToPublishDirectory="PreserveNewest" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
对的,这是可能的.只需获取app文件夹的路径,然后将其传递给配置或其他任何需要它的人:
public class Startup
{
public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv)
{
var wwwrootRoot = env.WebRootPath;
var appRoot = appEnv.ApplicationBasePath;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3836 次 |
| 最近记录: |