[转载].NET MVC4 Razor 视图预编译

本文详细介绍了如何在ASP.NET MVC项目中预编译Razor视图,包括安装第三方工具RazorGenerator、配置生成操作、引用相关Nuget包以及在项目启动时注册预编译视图的完整流程。特别强调了预编译视图的注意事项,如避免预编译特定视图文件以确保布局和模板正确工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

平时使用.NET MVC中不乏有类似的需求:某些razor视图,特别是系统后台的视图,不想让用户自行更改,需要通过某种方法把视图模板编译到项目的dll中去。

但是VS并不提供razor的预编译,如果需要对razor预编译需要借助第三方工具:Razor Generator

这里以VS2013为例 

1,依次选择:工具---扩展和更新---左侧选择联机---搜索RazorGenerator,然后安装

2,对MVC项目中的Razor视图右键--属性--生成操作“无”,自定义工具“razorgenerator”,同时你会看到Razor页面被生成了.cs文件

    (_ViewStart.cshtml跟_Layout.cshtml等布局视图除外...) 

3,引用PrecompiledMvcViewEngineContrib

对项目引用点右键“管理Nuget程序包”联机查找“PrecompiledMvcViewEngineContrib”,然后添加引用

4,App_Start中添加一个类

public class ViewEngineStart
    {
        /// <summary>
        /// 初始化注册预编译视图
        /// </summary>
        public static void Start()
        {
            Assembly asm = Assembly.GetExecutingAssembly();
            var engine = new PrecompiledMvcEngine(new List<Assembly> {
                Assembly.Load("AppServer")
            });
            System.Web.Mvc.ViewEngines.Engines.Insert(0, engine);
            System.Web.WebPages.VirtualPathFactoryManager.RegisterVirtualPathFactory(engine);
        }
    }

然后,Global.asax的Application_Start中执行上面类的Start方法

ViewEngineStart.Start();

这里就在程序初始化的时候把视图注册到虚拟路径当中了,

最后发布项目,运行!你会发现Views里面你设置预编译的razor视图没有了,网站能够正常访问到页面!

 

有几个需要注意的地方(由于刚用这个预编译,也不是太熟,后面发现新用法会持续更新)

1、默认预编译默认只支持cshtml跟vbhtml,可以自己设置后缀,文件格式化路径

2、预编译的时候不要预编译_ViewStart.cshtml跟_Layout.cshtml

 

    如果预编译了_ViewStart.cshtml,视图执行之前不会执行_ViewStart.cshtml,也就是说如果在_ViewStart.cshtml定义了Layout,这个页面会没有布局

 

    如果预编译了_Layout.cshtml,你会发现访问页面时候报错提示找不到_Layout.cshtml

 

    因为在预编译之后Layout只是一个属性,不会生成方法,如@Html.Partial都会生成Html.Partial(XXXX)方法,所以可能这里是导致Layout无效的原因!

 

3、页面单独定义Layout预编译后不会起作用,而且照旧会使用没有预编译的_ViewStart.cshtml里面定义的Layout 理由同上一段

 

所以如果项目的razor需要用到预编译,个人建议:

1、如果用到模板布局,只预编译使用默认_ViewStart.cshtml定义的模板的视图,单独使用不同模板的不去预编译(因为预编译后Layout会失效,依旧会调用_ViewStart.cshtml)定义的模板

2、如果每个页面相互独立都不需要用到模板,则可以全部预编译!

 

如果有发现怎么解决这两个文件预编译后能正常访问的欢迎留言!

作者:Я!ńɡ

转载自:http://www.cnblogs.com/263613093/p/4309515.html

 ================================================================================================================

参考:http://www.cotide.com/xcli/Blog/Article/54

转载于:https://www.cnblogs.com/VAllen/articles/ASP-NET-MVC4-Razor-View-Pre-Compilation.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值