安利一个MVC的好东西,RazorGenerator.MsBuild,可以自动编译cshtml文件

在传统的asp.net webForm 开发里,在发布时,如果选择预编译,就会自动将所有的aspx 文件编译,在发布后的目录里,就看不到aspx的源代码了,同时因为是预编译的,所以每个页面打开速度都挺快的。

而在MVC里,默认就不是这样了。

MVC在发布以后,我们熟知的这些cshtml文件会随着发布,一起发布到发布后的目录里。你源代码过去咱也不说什么了,但是,却没有把这些cshtml文件预编译为二进制文件。就会导致当我们每打开一个新页面时,第一次总会慢一些(这个是第一次是指,整个网站的这个页面被用户的第一次访问,而不是仅仅针对你一个人来说哦)。

举个例子来说,比如我们访问  /Activity/Page/1

对应的controller  是 Activity,action是Page

那么,当我们第一次访问这个 action时,.NET 会把 这个 Activity controller 对应的view 目录里的所有view(cshtml文件 ,实际目录其实就是 /Views/Activity/*.cshtml 这些文件)编译成一个dll文件(其实是先转成.cshtml.cs,然后再编译的),然后再加载这个dll进行。所以,第一次,总会慢一些,再快的服务器也得稍微等那么一下下,即使你负载均衡又怎么样?

当第二次再访问这个action时,.NET 会自动判断是否已编译过,如果已编译就直接调用执行,否则再重新编译一次(文件如果发生了变更会重新再编译一次)。

这时候,我们已经访问过 /Activity/List/Page/1,在页面里我们找到一个“活动”点进去,跳转到 /Activity/Detail/2。这个时候 会不会再要编译一次呢?不会了,因为在访问 /Activity/Page/1 的时候,已经把 "/Views/Activity/*.cshtml"这些文件都编译过了。.NET的这些cshtml编译策略是把一个目录下的所有cshtml文件都编译一遍,合并输出到一个dll文件里。

这块说明,请参考http://www.cnblogs.com/artech/archive/2012/09/04/razor-view-engine-01.html

我解释的不够好。

---------------------------------------------------------------------

那么,我们如何在发布的时候,就将项目工程里的所有cshtml都一次性编译好呢。

使用 "RazorGenerator.MsBuild",可以直接通过Nuget安装。(链接附在最后)

安装好以后,在编译之前,它会将项目工程里声明引入的cshtml文件都转成 {viewPageName}.cshtml.cs 文件,默认是输出到 "obj/CodeGens"目录下面;然后项目编译的时候就会把这些*.cshtml.cs编译,并合并到主程序集的dll文件 里,比如你的项目名是 RazorBuildDemo,那么生成的dll 就是RazorBuildDemo.dll, 所有的*.cshtml.cs 编译也都会合并到RazorBuildDemo.dll 里。

网站发布到生产环境以后,除了网站第一次打开稍微慢一些(网站初始化过程),其他时候打开各个页面,是不是要比之前的快一些了?

当然,这个东西的好处不仅仅是 预编译,还可以自动在发布时检查页面里的错误。因为是预编译页面,所以在发布时,每个页面都会进行处理,这样就可以自动检查页面里的错误代码(因为必须保证编译通过才行),省得有些地方改了,而又没去测,导致之前可能出现的低级错误。

这家其实还有几个这方面的工具,大家可以去看看。

之前一直搜这方面的工具,可惜一直都没有好的发现,有几个都是RazorGenerator.MVC 这个工具,虽然是同一家出的,但是这个要给每个页面都配置一下,好像新版的不用每个页面都设置这么麻烦,没去细研究,但是我想总没有 RazorGenerator.MsBuild 这个好用吧?我就喜欢这种傻瓜式的,用起来方便。所以我们自己做东西也要奔着傻瓜式做,让用户用着简单,可以有复杂的功能,但是上手,一定要简单,不然实在太难受了。我特么的就是一个懒人。

今天发现了这个好东西,不敢独享,我想一定要分享出来,给有需要的人。(我看这个RazorGenerator.MsBuild的安装数还是很多的)。

在百度我专门搜“RazorGenerator.MsBuild”搜的都是几个国外的英文站,国内就搜出来一个,也是博客园的,不过有点早,说明也比较浅一些。难道做ASP.NET MVC 开发的人少?

唉,自己技术圈子小,这些知识知道的还是太少,蛋疼!

所以,推荐大家,以后建MVC项目,最好把这个包添加到项目中。

在此,必须安利一下这个好东西“RazorGenerator.MsBuild”。

asp.net MVC开发,你值得拥有!

https://github.com/RazorGenerator/RazorGenerator

时间: 2024-10-12 19:57:26

安利一个MVC的好东西,RazorGenerator.MsBuild,可以自动编译cshtml文件的相关文章

ASP.NET MVC中切换模板页(不同目录的cshtml文件)

不想打字,看图,看来以后建立一个父类控制器还是有必要的...

ASP.NET MVC4入门—2、第一个MVC程序

目录 ASP.NET MVC4入门—1.ASP.Net的两种开发方式 ASP.NET MVC4入门—2.第一个MVC程序 开发环境:VS2012 .SQL Sserver2008 1.打开VS,文件——新建项目Guestbook 点击确定后,会出现如下对话框,进行模版的选择,在这里你还可以选择是否创建单元测试,为了养成一个良好的习惯,这里我勾选了“创建单元测试项目” 这时会创建两个项目:Guestbook和Guestbook.Tests,将Guestbook设置为启动项目,然后,按Ctrl-F5

用backbone实现的一个MVC的小demo

一.Apache配置 本实例需要使用php支持.要现在Apache中配置虚拟目录,在Apache下的httpd-vhosts.conf文件中添加如下代码 <VirtualHost *:80> DocumentRoot "D:/htdocs/backbone_demo" ServerName www.backbonedemo.cn </VirtualHost> 在windows的hosts文件中添加配置,hosts文件的位置在c:\windows\system32

ASP.NET MVC 小牛之旅2:体验第一个MVC程序

了解了什么是MVC之后,接下来用一个非常简单的留言板程序概要的了解MVC网站开发的过程,对MVC开发有个大致的轮廓.第一个项目将不会提到过多与数据库相关的技术,因此将以Framework Code First开发技术进行数据访问,核心在于体验MVC开发的过程. 2.1利用ASP.NET MVC4项目模板创建项目 开启Visual Studio2012,选择“文件”→“项目”的菜单命令 在打开的“新建项目”对话框中展开web→“ASP.NET MVC4 Web 应用程序”,修改一下名称为“MvcG

今天看到一个非常好的东西。希望大家共勉

转载:看到的一个小故事.意义很深! 在一个山谷的禅房里有一位老禅师,他发现自己有一个徒弟非常勤奋,不管是去化缘,还是去厨房洗菜,这个徒弟从早到晚,忙碌不停. 但是这小徒弟内心很挣扎,他的眼圈越来越黑,终于,他忍不住来找师傅. 他对老禅师说:"师傅,我太累,可也没见什么成就,是什么原因呀?" 老禅师沉思了片刻,说:"你把平常化缘的钵拿过来." 小徒弟就把那个钵取来了,老禅师说:"好,把它放在这里吧,你再去给我拿几个核桃过来装满." 小徒弟不知道师傅

安利一个很火的 Github 滤镜项目

安利一个很火的 Github 滤镜项目 园长 1 个月前 简评:通过深度学习,一秒钟让你的照片高大上,这是康奈尔大学和 Adobe 的工程师合作的一个新项目,通过卷积神经网络把图片进行风格迁移.项目已开源,名字叫「Deep Photo Style Transfer」,有兴趣的玩家请移步 Github. 照片风格迁移的项目非常多,比如之前迁移名画的作品(GitHub 地址). (第一张图片是参照,第二张是原图,第三章图片是迁移后)或者各种风格化的项目(7 个 App 可让你的照片变成艺术品). 近

第一个MVC模式的程序

数据库 是一个SQL sever数据库,结构很简单,创建名为firstMVC的数据库,只包含一个数据表(名称为Persons),其中共有三列,分别用于保存人员(persons)的ID.姓名以及创建日期: 数据库信息: 模型 需要一个数据模型与数据库进行通信并处理数据.使用LINQ to SQL 从数据库检索数据.在Model文件夹添加一个新的LINQ to SQL项目条目,并将其名称指定为Persons.然后连接数据库,拖动Persons数据表,将其从服务器资源管理器拖动到LINQ to SQL

如何编写NopCommerce插件(一)建立一个MVC的项目

一.建立一个MVC的项目: 二.添加Description.txt文件 其中,Group表示插件是属于哪一组. FriendlyName:插件的名称 SystemName:插件的唯一标示 FileName:插件所在的dll 三.添加RouteProvider.cs文件 public partial class RouteProvider : IRouteProvider { public void RegisterRoutes(RouteCollection routes) { routes.M

CSAPP中一个有意思的小东西

回家的效率明显下降了,但是第三章还是快要结束的节奏.今天看到定长数组这里的时候,看到一个好玩的东西.在计算机的底层中,所有对数组的操作都是利用指针来完成的.数组其实也是一个很简单的数据结构,就是把一些最简单的数据类型合并在一段连续的内存区域上,这就是一个复合类型---数组. 学C语言的时候,大家都知道访问数组元素有两种方法,一种是利用数组名加索引的形式,另外一种就是利用指针加上偏移量的形式.在底层中,不管你用什么方式来访问元素,最后多会转化成对指针的操作. 在编写 代码的时候,编译器在编译过程中