ASP.NET MVC 應用程式的部署不像是 ASP.NET Web Form 這麼簡單,只要用 \bin 就可以了,主要原因是 ASP.NET MVC 使用了 ASP.NET Routing 機制去維護 MVC 之間的連結,若 IIS 無法載入 ASP.NET Routing 時,就會發生無法運作的情況...
ASP.NET MVC 應用程式的部署不像是 ASP.NET Web Form 這麼簡單,只要用 \bin 就可以了,主要原因是 ASP.NET MVC 使用了 ASP.NET Routing 機制去維護 MVC 之間的連結,若 IIS 無法載入 ASP.NET Routing 時,就會發生無法運作的情況。
所以,在部署 ASP.NET MVC 3 應用程式前,請先檢視下列環境:
1. 請務必註冊 ASP.NET 4.0 (v4.0.30319,如果是在 .NET Framework 4 安裝後才安裝 IIS 的,請記得執行 %WINDIR%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis -ir,若是 32 位元則是 %WINDIR%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis -ir)。
2. 應用程式集區的版本,請使用 v4.0.30319。
3. 安裝 ASP.NET MVC 3.0 Runtime Libraries,若不想安裝,則需要在 MVC 應用程式的 \bin 目錄中放入幾個組件 DLL,可參考本討論。
而在部署應用程式時,可能會碰到幾種問題:
1. HTTP 404.0,表示路徑錯誤,但路徑對仍出現這訊息,表示 ASP.NET Routing 未啟動,此時可能是 System.Web.Routing.dll 找不到或是 ASP.NET 本身沒有註冊到 IIS。
2. 瀏覽預設路徑時發生 HTTP 403,表示 Routing 的預設路徑不正確或沒有設定。
3. 遺失某些組件:
這個狀況比較會發生在使用 Razor 作為 View engine 的 MVC 3 應用程式,如果是選用 Razor 的話,則還要在專案中加入下列組件的參考,並且將 "複製到本機" 設為 true:
- Microsoft.Web.Infrastructure.dll
- System.Web.Razor.dll
- System.Web.WebPages.dll
- System.Web.WebPages.Razor.dll
- System.Web.WebPages.Deployment.dll
- System.Web.Helpers.dll
完成以後,再用一般的 ASP.NET 應用程式部署方式部署,就可以正常使用了。
PS: 以上以 IIS 7.5 為撰寫基礎,若是其他版本,請 Google 一下 "Deploy MVC3 IIS" 就能找到不少資料可參考。