6.10.2 创建嵌入式文件
首先,我们应该创建一个文件并且标记它为 嵌入式资源。任何程序集都可以包含嵌入式资源文件。至于如何标记它,这要看你的项目是什么格式的。
项目格式为:xproj/project.json
假设,我们有个EmbeddedPlugIn的项目;如下所示:
为了使处于 Views 文件夹下 所有文件 作为嵌入式资源,我们需要在 project.json 添加如下配置:
项目格式为:csproj
假设,我们有个EmbeddedPlugIn的项目;如下所示:
你可以使那些你想在web应用程序中使用所有文件标记为嵌入式资源。
当这些文件嵌入进程序集以后,我们可以使用启动配置来添加嵌入资源管理器。你可以在模块的PreInitialize方法中添加如下代码:
new EmbeddedResourceSet(
"/Views/",
Assembly.GetExecutingAssembly(),
"EmbeddedPlugIn.Views"
)
参数注解:
第一个参数定义的是文件的 根目录(如同: Views/)。它匹配根名称空间。
第二个参数定义的是包含这些嵌入资源的 程序集。这段代码应该位于包含嵌入资源的程序集中。否则,你应该相应的改变这个参数。
6.10.4 消费嵌入视图
对于 .cshtml 文件,它直接从控制器的Actin中返回。下面展示的是一个在EmbeddedPlugIn程序集中的BlogController控制器:
如你所见,它如常规控制器一样按你预期的那样工作。
为了消费嵌入式资源(js,css,img…),我们可以像通常做的那样在视图中使用它们:
@section Styles {
<link href="~/Views/Blog/Index.css" rel="stylesheet" />
}
@section Scripts
<script src="~/Views/Blog/Index.js"></script>
}
假设这个主应用程序有Styles和Scripts的section。我们也可以像通常那样做的一样使用其它文件(如图片文件)。
6.10.6 配置ASP.NET Core
ASP.NET MVC 5.x项目会通过Owin(如果你的startup文件包含这行代码:app.UseAbp())自动的集成嵌入式资源管理器。但是,对于ASP.NET Core项目,我们需要手动添加 app.UseEmbeddedFiles() 到Startup类中,随后添加 app.UseStaticFiles()。如下所示:
文件忽略
通常,在嵌入式资源管理器中的所有文件如同静态文件一样被客户端直接消费。以安全或其它意图为目的,我们可以忽略某些扩展名文件。.cshtml和.config 文件默认是被忽略的(来自客户端的直接请求)。你可以在模块的PreInitialize方法中添加更多的扩展名;如下所示:
Configuration.Modules.AbpWebCommon().EmbeddedResources.IgnoredFileExtensions.Add("exe");