天天看點

ASP.NET 預編譯筆記

  本來下寫篇總結,但感覺自己語言不知道怎麼組織。就算了。

aspnet_compiler的問題:

一開始

aspnet_compiler -v  \   -p  F:  E: -fixednames

error ASPRUNTIME: 目标目錄不是空的。請手動删除該目錄,或選擇其他目标目錄。

aspnet_compiler -v  \  -f  -p   F:  E: -fixednames

error ASPRUNTIME: 目标目錄非空。并且似乎包含以前編譯的應用程式。請手動删除該目錄,或選擇其他目标目錄。

換别的目錄

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config(132): error AS PCONFIG: 未能加載類型“System.Data.Entity.Design.AspNet.EntityDesignerBuildProvider”。

算了,單純指令行準備放棄治療,後來發現VS2013在釋出裡面其實有預編譯選項的,注意看ms build輸出窗格的資訊就知道VS怎麼預編譯了。後來想上面這個問題可能是我用了64位的aspnet_compiler有問題。我後來照着VS打是沒問題的。

MVC動态View編譯:

ASP.NET MVC以目錄為機關的動态View編譯,編譯生成的程式集臨時存放在ASP.NET的臨時目錄“%WinDir%\Microsoft.NET\Framework\{Version No}\Temporary ASP.NET Files\”下。比如我的就在

C:\Users\ABC\AppData\Local\Temp\Temporary ASP.NET Files.程式寄宿在IIS的話是在這個目錄裡的root裡生成那類檔案。VS的iis express則是vs子目錄。

webform動态編譯:

總結

  按微軟的說法,預編譯最終使用者可以避免第一次請求應用程式而導緻的延遲。但實際上我體會不到。第一次請求依舊那麼慢,而且後續的請求還是會編譯缺失的view(也許是我之前弄錯了?)我試過用RazorGenerator,但是失敗了,結局沒有實作其官方文檔實作的效果。收獲還是有的,我發現VS每改一遍代碼然後生成,上文提到的臨時目錄裡的profileoptimization.prof就會更新一遍,而第一次請求的時候,這個臨時目錄就會清空然後重新生成一遍。

  我想最後最優解應該是增量編譯吧。

參考連結:

DUDU:

http://www.cnblogs.com/dudu/archive/2011/02/07/aspnet_compiler_precompilation.html

MSDN:

http://msdn.microsoft.com/zh-cn/library/ms229863(v=vs.100).aspx

MVC

http://www.cnblogs.com/artech/archive/2012/09/04/razor-view-engine-01.html

ASP.NET

http://www.cnblogs.com/artech/archive/2007/05/26/760292.html http://www.cnblogs.com/mqingqing123/archive/2006/03/06/343623.html

VS2012預編譯選項(注意VS2013會有不同):

http://www.cnblogs.com/Ivony/archive/2011/10/26/2224696.html

cd C:\Windows\Microsoft.NET\Framework\v4.0.30319