﻿# ASP.NET MVC 開發心得分享 (2)：與原始碼共舞

各位應該都知道 [ASP.NET MVC](http://www.asp.net/mvc) 已經在 2009/1/27 [發佈 RC 版](https://weblogs.asp.net/scottgu/asp-net-mvc-1-0-release-candidate-now-available)，各位可以從[這裡](http://go.microsoft.com/fwlink/?LinkID=141184&clcid=0x409)下載，而 RC 版的 Release Note 也可以從[這裡](http://go.microsoft.com/fwlink/?LinkID=137661&clcid=0x409)下載，這次的改版有許多重大更新，因此建議各位詳細閱讀 Release Note。

我們在練習開發 [ASP.NET MVC](http://www.asp.net/mvc) 的過程中時常會遇到瓶頸，由於目前缺乏許多正式且完整的文件，且網路上的資訊散落各地、版本不一，從 Alpha, Preview 1, ..., Preview 5, Beta, 一直到 RC 大約發展了約兩年時間，可想見網路上的資訊之混亂。

所以要瞭解 [ASP.NET MVC](http://www.asp.net/mvc) 最好的方式就是直接讓 [ASP.NET MVC 原始碼](http://www.codeplex.com/aspnet)跟開發中的專案放在一起，若遇到任何疑問就可以立即查詢原始碼 ( 快速鍵: F12 , Go To Definition ) 進行瞭解，我個人就是透過這種方式瞭解不少 [ASP.NET MVC](http://www.asp.net/mvc) 內部運作的細節。

今天我就來講解如何讓 ASP.NET MVC 專案與 MVC 原始碼共舞，雖然加入專案是件簡單的事，但加入 ASP.NET MVC 原始碼專案到你的專案裡還是有些必須特別注意的事項：

1.  下載 [ASP.NET MVC RC 1 Source Code](http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=22467)
2.  解壓縮後將 MVC\\src\\SystemWebMvc 目錄複製到你的方案目錄下  
    ![解壓縮後將 MVC\\src\\SystemWebMvc 目錄複製到你的方案目錄下](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/cc25107ce840d5c8271c-image_3.png "解壓縮後將 MVC\src\SystemWebMvc 目錄複製到你的方案目錄下")
3.  在 Visual Studio 方案中加入現有專案：System.Web.Mvc.csproj  
    ![Add Existing Project from Visual Studio](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/0a6929b506f87672f2b1-image_11.png "Add Existing Project from Visual Studio")  
    ![Add Existing Project](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/b8aa172e504f44b13aa1-image_10.png "Add Existing Project")
4.  移除現有 MVC 專案的 System.Web.Mvc 組件參考  
    ![移除現有 MVC 專案的 System.Web.Mvc 組件參考](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/7378bce0f63f9afa1e9e-image_14.png "移除現有 MVC 專案的 System.Web.Mvc 組件參考")
5.  在現有 MVC 專案的 References 中將 System.Web.Mvc 專案加入參考  
    ![將 System.Web.Mvc 專案加入參考 ](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/ff6f9cdf2a31f26a9b6c-image_17.png "將 System.Web.Mvc 專案加入參考 ")
6.  開啟專案根目錄下的 web.config 設定檔，並找到 <system.web> –> <compilation> –> <assemblies> 將 System.Web.Mvc 組件那一行註解起來。  
    ![開啟專案根目錄下的 web.config 設定檔，並找到 <system.web> –> <compilation> –> <assemblies> 將 System.Web.Mvc 組件那一行註解起來](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/d7b9a5d65182ec814e72-image_20.png "開啟專案根目錄下的 web.config 設定檔，並找到 <system.web> –> <compilation> –> <assemblies> 將 System.Web.Mvc 組件那一行註解起來") 
7.  開啟專案 View 目錄下的 web.config 設定檔，將 <system.web> –> <pages> 的 pageParserFilterType 屬性修改成：
    
    ```
    System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc,
    Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
    ```
    
    ![開啟專案 View 目錄下的 web.config 設定檔，將 <system.web> –> <pages> 的 pageParserFilterType 屬性修改成 System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc,Version=1.0.0.0, Culture=neutral, PublicKeyToken=null](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/eebf893c1eaf010a7a0d-image33.png "開啟專案 View 目錄下的 web.config 設定檔，將 <system.web> –> <pages> 的 pageParserFilterType 屬性修改成 System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc,Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")  
    如果不這樣改，若要在 View 裡面使用強型別的 Model 物件就會編譯錯誤。  
    *註：在 View 裡面使用 Model 強型別這特色是從 RC 版才開始有的。*

\---

上述步驟就屬第 7 步驟花我最多時間研究，但最後終於找出成功與原始碼共舞的方法了，請享用！

\---

這種與原始碼一起運作的方式僅建議用在開發研究時使用，若未來要將專案部署到正式機時，記得將步驟還原後重新建置一次，否則你就必須要將自行建置的 System.Web.Mvc.dll 組件一併部署到正式機，不過我不建議用這種作法，除非你有修改 System.Web.Mvc 專案的原始碼 (當然也不建議這麼做)。

**相關連結**

-   [ASP.NET MVC RC 1 Source Code](http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=22467)
