2011-03-31 73 views
42

我想知道是否可以編譯Razor視圖,如基於WebForm的視圖?可以編譯Razor視圖嗎?

編譯Razor視圖是否有意義,爲什麼有人想要這樣做?

+0

從技術上講,它們是從即時編譯器編譯的。您也可以啓用視圖構建,以使複選框失敗。 – 2015-11-30 15:34:25

+0

相關:http://stackoverflow.com/questions/383192/compile-views-in-asp-net-mvc – 2016-10-05 14:14:55

回答

23

是的,你可以。看看下面的帖子:Compile your asp.net mvc Razor views into a seperate dll

這是關於如何將剃鬚刀視圖編譯爲單獨的dll的「分步指南」。我不知道這是你的目標,但它肯定會讓你朝着正確的方向發展。

+4

這個答案現在已經過時了,你現在應該參考這篇文章:http://blog.davidebbo.com /2011/06/precompile-your-mvc-views-using.html – Quango 2012-06-13 08:33:32

1

是的,這是可能的。事實上,我能想到的最好的例子是電子郵件模板引擎。如果您編譯和緩存模板,那麼您可以快速刪除電子郵件,而無需再次進行解析。

這是一個在MVC之外使用Razor的好例子。

53

編輯:

下面是有關這個主題的一篇博客文章,以及:

How to Detect Errors of Our ASP.NET MVC Views on Compile Time

爲了讓您的意見被編譯,執行下列操作;

  1. 卸載你的項目通過對對 點擊在VS解決方案 Explorer中的項目,然後點擊卸載 項目
  2. 右鍵單擊已 被轉換爲不可 工程項目,然後單擊「編輯 your_project_name .csproj「(即 將是.vbproj,如果您的 項目是VB項目)
  3. 請參閱以下代碼;

    <!--There some lines of code here and I deleted them to get to the point quickly--> 
    
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion> 
    <MvcBuildViews>false</MvcBuildViews> 
    

  4. 變化從false的MvcBuildViews標記值true

  5. 後保存並重新加載 項目。

當你編譯你的解決方案後,你會看到你的視圖也會被編譯。

注意:要測試它,有意破壞一些代碼並嘗試構建。你會看到你會得到一個錯誤信息。

+1

我會試試看看會發生什麼。 – 2011-04-02 16:56:56

+0

它應該工作。你嘗試過嗎? – tugberk 2011-04-02 17:00:30

+5

完成此更改後,在構建我的解決方案時,我開始越過應用程序級別錯誤消息獲得''allowDefinition ='MachineToApplication'。解決方案是在* debug模式和release模式下運行_Clean Solution_。 – 2013-07-17 14:12:31

28

MvcBuildViews檢查非常好,但如果它足夠複雜,它會爲構建您的Web應用程序增加5-10秒的處罰。它不會緩存編譯輸出,因此每次都會對所有視圖進行完整編譯。

我找到了一個很好的平衡通過以下的above advice並添加條件屬性:

<MvcBuildViews Condition=" '$(Configuration)' == 'Release' ">true</MvcBuildViews> 

我們預計到ReSharper的標誌了在視圖中的任何錯誤,反正和開發人員可以隨時建立釋放配置作爲測試 - 我們有一個開發前運行的「預檢」腳本,以便他們可以輕鬆確保包目標的工作等 - 如果所有失敗,構建服務器將捕獲它。

也許這個技巧很明顯,但我只是真的開始正確地學習msbuild,而不是爲這些任務編寫Powershell腳本。我希望這對某人有幫助。

+0

這是純粹的光彩:) – Korayem 2015-09-09 22:50:08