ASP.NET MVC 將所有的View包成DLL

25 August 2011 — Written by Sky Chang
#ASP.NET MVC#NuGet#Visual Studio

有的時候開發ASP.NET MVC專案時,我們會將Model獨立出來進行開發,另外成立一個專案來進行處理,那View呢??是否View也有可能獨立成一個專案??

我們從@helper開始,把常用的東西抽離;到把整個@helper當成一個專案來開發,做成DLL;那既然@helper都能包成DLL了,感覺上View預先編譯成DLL也不遠了,但其實David和Chris早就想到了,而且各自有各自的做法,既然前面都是介紹David,我們就繼續延續下去吧。

當然,這些都是實驗性質的技術,所以請大家酌量使用。

當然,第一步還是要先把Razor Generator裝起來,位置在工具=>擴充管理員。

image

裝好後,我們可以先建立一個新的ASP.NET MVC 3應用程式專案,然後選擇"網際網路應用程式"。

image

接下來,因為我們要將View獨立出來一個專案,所以必須再加入一個類別庫專案。

image

image

接下來,我們要使用NuGet取得PreCompiledMvcViewEngine Package,選擇剛剛加上去的類別庫,然後選擇Add Library Package Reference。

image

image

然後,勇敢的按下去安裝,完成後,他預設會幫你裝上一些樣板如下。

image

因為我們要把所有的View搬移過來,所以先把類別庫專案的View資料夾砍掉,也順便把Class1.cs砍掉,並且將MVCApplication專案的View剪下,貼到類別庫專案裡面去。

image

接下來,要設定這些View的屬性,將這些View的屬性設定如下,自訂工具請輸入"RazorGenerator",建置動作選擇"無",如果成功的話,會發現.cshtml下面,會出現一個.cs檔案的樣板。

image

接下來,因為View的部分會使用到MvcApplication的Model,所以要讓View的這部分參考到MvcApplication。

image

此時,就可以先將View做個編譯了,編譯完成後,回到MVCApplication裡面,既然MvcApplication需要用到View,自然也需要參考到View,但是如果選取專案的話,會形成循環,所以這邊我們只能參考到View的DLL檔案,也就是說,如果未來View有改過東西,就必須要先將View的部分先編譯一次,MVCApplication的部分才會改變。

image

這樣就完成了。

基本上,如果能讓View打包成DLL,是有許多好處的,除了可以讓發佈的檔案更加單純,甚至可以進行View的Unit Test,如果大家有興趣的話,可以來試試看喔!!

參考資料

  1. http://blog.davidebbo.com/2011/06/precompile-your-mvc-views-using.html
  2. http://www.chrisvandesteeg.nl/2010/11/22/embedding-pre-compiled-razor-views-in-your-dll/
Sky & Study4.TW