Asp.net

如何強制編譯 ASP.NET MVC 視圖?

  • May 4, 2017

我有一個 Windows Azure Web 角色,其中包含一個使用 ASP.NET MVC 的網站。當 HTTP 請求到達並首次載入頁面時,視圖(.aspx 或 .cshtml)會被編譯,這需要一些時間,因此第一次提供頁面所需的時間明顯長於稍後提供同一頁面的時間。

我已啟用<MvcBuildViews>在此答案中描述)強制執行視圖的編譯時驗證,但這似乎對站點部署和執行時的編譯沒有任何影響。

Azure Web 角色有所謂的啟動任務,還有一種特殊的OnStart()方法,我可以在其中放置任何預熱程式碼,所以一旦我知道要做什麼,將其添加到角色中就不是問題了。

有沒有辦法強制編譯所有視圖?

事實證明,可以使用ClientBuildManager.PrecompileApplication執行ASP.NET 預編譯,並模仿按需編譯行為,但只編譯每個頁面。試過了 - 第一次載入看起來明顯更快。

重要的部分是作為ClientBuildManager建構子參數傳遞的內容。解決方案是列舉所有對象和列舉.Applications中的每個項目,並使用和從每個項目作為建構子的參數。Site``.Applications``.VirtualDirectories``Path``VirtualPath``ClientBuildManager

看看David Ebbo 的 Precompiled Razor Views

你為什麼想這麼做?

這樣做的一個原因是避免在您的站點啟動時出現任何執行時影響,因為在執行時沒有任何東西需要編譯。這在具有許多視圖的站點中可能很重要。

此外,您根本不再需要部署 cshtml 文件,從而使部署文件集更小。

另一個很酷的好處是它使您能夠對視圖進行單元測試,這對於標準執行時編譯模型來說一直是非常困難的。我將在以後的文章中更詳細地介紹這一點。

引用自:https://stackoverflow.com/questions/10618600