ASP.NET MVC5 视图预编译
2014-04-26 17:32
190 查看
一.目的
关于Razor视图及引擎原理,一句两句话是讲解不完的。
这里可能不恰当地说,cshtml视图文件是先编译成dll文件,再通过视图引擎“解析”成html输出到浏览器。
MVC编译cshtml是动态编译的,并缓存起来。可它到底缓存到哪里了???
请看园子里的蒋金楠《ASP.NET MVC的Razor引擎:View编译原理》一文 !
相信不少人想过:能不能把视图进行预(提前)编译?答案是肯定的,否则就没法叙述下去了。
预编译提升网站程序运行性能,毕竟少一步编译过程,节省开销(当然和缓存起来相比的效果有待测试?);
能预编译也就意味着不需要视图原始文件。这样分发给别人项目测试或演示时,可以隐藏源码。
二.安装工具
VS没有提供这种编译工具,但第三方技术团队为其提供扩展,如图搜索:RazorGenerator(这里我已经装过)
三.安装类库
首先创建一个MVC5 Demo项目后……
在“程序包管理器控制台”(也可以用“管理解决方案的NuGet程序包”窗口里搜索安装)
安装执行:Install-Package RazorGenerator.Mvc
查看帮助:Get-Help RazorGenerator
启用执行:Enable-RazorGenerator
命令执行后,每一个扩展名为cshtml都会自动多一个类文件,如图:
注:此时在VS里build生成项目后,就可以删除视图原始文件,运行网站以验证是否预编译成功。
四.发布与部署
发布Web,部署网站。删除Views文件下所有cshtml视图文件后,只剩下一个Web.config文件,如图:
运行网站ok!(就不截图了)。这一步也是验证,部署项目是否正常加载视图!
五.问题注意
官方英文:
Optionally specify one of the generators in the first line of your Razor file.
A generator declaration line looks like this:@* Generator: MvcHelper *@ .
If you don't specify this, a generator is picked based on convention
(e.g. files under Views are treated as MvcViews)
其实大概意思:
对于Helpr文件处理方式有所不同。Helper文件一般放在别的文件夹下。
这时需要在Helper文件的第一行添加 @* Generator: MvcHelper *@ 来声明一下即可!
六.编译另一方法
上面使用“Enable-RazorGenerator”方法,直接全部自动Generator了。你也可以:
注:蓝色标注的地方,“内容”更改为“无”时,发布Web时,就没有视图文件了(省得删了)。
七.领悟
这篇博文没有什么技术含量,也有不好意思发表出来的滋味啦。
只是实际项目中需要预编译视图时,走过弯路。为了有需要的人节省学习时间,才总结此文!
你可以想象cshtml文件也可以编译dll文件了,是不是可以把它做资源库方式,甚至保存到数据库中。
在看过老外一篇《How to load Views from Assembly in MVC》博文中,这一想法说明是可以实现的。
为什么要这样折腾呢?呵呵,视图分离,控制器分离……
这样便于做插件模块化开发,其次做成项目产品后,尽可能地做一下保护措施!
关于Razor视图及引擎原理,一句两句话是讲解不完的。
这里可能不恰当地说,cshtml视图文件是先编译成dll文件,再通过视图引擎“解析”成html输出到浏览器。
MVC编译cshtml是动态编译的,并缓存起来。可它到底缓存到哪里了???
请看园子里的蒋金楠《ASP.NET MVC的Razor引擎:View编译原理》一文 !
相信不少人想过:能不能把视图进行预(提前)编译?答案是肯定的,否则就没法叙述下去了。
预编译提升网站程序运行性能,毕竟少一步编译过程,节省开销(当然和缓存起来相比的效果有待测试?);
能预编译也就意味着不需要视图原始文件。这样分发给别人项目测试或演示时,可以隐藏源码。
二.安装工具
VS没有提供这种编译工具,但第三方技术团队为其提供扩展,如图搜索:RazorGenerator(这里我已经装过)
三.安装类库
首先创建一个MVC5 Demo项目后……
在“程序包管理器控制台”(也可以用“管理解决方案的NuGet程序包”窗口里搜索安装)
安装执行:Install-Package RazorGenerator.Mvc
查看帮助:Get-Help RazorGenerator
启用执行:Enable-RazorGenerator
命令执行后,每一个扩展名为cshtml都会自动多一个类文件,如图:
注:此时在VS里build生成项目后,就可以删除视图原始文件,运行网站以验证是否预编译成功。
四.发布与部署
发布Web,部署网站。删除Views文件下所有cshtml视图文件后,只剩下一个Web.config文件,如图:
运行网站ok!(就不截图了)。这一步也是验证,部署项目是否正常加载视图!
五.问题注意
官方英文:
Optionally specify one of the generators in the first line of your Razor file.
A generator declaration line looks like this:@* Generator: MvcHelper *@ .
If you don't specify this, a generator is picked based on convention
(e.g. files under Views are treated as MvcViews)
其实大概意思:
对于Helpr文件处理方式有所不同。Helper文件一般放在别的文件夹下。
这时需要在Helper文件的第一行添加 @* Generator: MvcHelper *@ 来声明一下即可!
六.编译另一方法
上面使用“Enable-RazorGenerator”方法,直接全部自动Generator了。你也可以:
注:蓝色标注的地方,“内容”更改为“无”时,发布Web时,就没有视图文件了(省得删了)。
七.领悟
这篇博文没有什么技术含量,也有不好意思发表出来的滋味啦。
只是实际项目中需要预编译视图时,走过弯路。为了有需要的人节省学习时间,才总结此文!
你可以想象cshtml文件也可以编译dll文件了,是不是可以把它做资源库方式,甚至保存到数据库中。
在看过老外一篇《How to load Views from Assembly in MVC》博文中,这一想法说明是可以实现的。
为什么要这样折腾呢?呵呵,视图分离,控制器分离……
这样便于做插件模块化开发,其次做成项目产品后,尽可能地做一下保护措施!
相关文章推荐
- Asp.Net 获取FileUpload控件的文件路径、文件名、扩展名
- 30本关于asp.net相关的经典书籍推荐
- ASP.NET设置焦点到输入框
- ASP.NET中常用的文件上传下载方法
- asp.net中关于<% %>、<%= %>的用法
- aspnetpager分页控件静态无刷新显示
- asp.net取得所有颜色值实例
- ASP.NET截取网页注释行之间的内容
- ASP.NET+AJAX解决网页打开等待问题
- ASP.NET应用程序资源访问安全模型
- asp.net程序防止sql注入
- asp.net如何把文件上传到另外一台服务器
- asp:ScriptManager(转)
- 用ASP.NET AJAX框架扩展HTML Map控件
- 理解ASP.NET 2.0中的单点登录
- ASP.NET 2.0应用程序安全强化纵览
- asp.net DataSet转换成List<model>[源码]
- ASP.NET实现回调实现的步骤
- 关于ASP.NET技术的学习顺序问题
- 如何在ASP.NET 应用中上传大文件