ASP.NET MVC5 視圖預編譯


一.目的

關於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》博文中,這一想法說明是可以實現的。

為什么要這樣折騰呢?呵呵,視圖分離,控制器分離……

這樣便於做插件模塊化開發,其次做成項目產品后,盡可能地做一下保護措施!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM