ASP.NET MVC Application在執行時,預設會引用註冊在GAC的System.Mvc.dll等程式庫,但如果要部署的主機沒安裝ASP.NET MVC,就會產生Could not load file or assembly 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'的錯誤訊息。

最簡單的解決方法是在目的主機上安裝ASP.NET MVC 3,但若基於某些理由(主機有很機車的軟體安裝原則、你曾搶了主機管理員的女友而心有嫌隙... 等)無法在主機安裝ASP.NET MVC 3,也可透過將必要DLL直接部署在BIN目錄下解決。

找到Phil Haack寫的MVC 2 手動部署提示,Scott Hanselman也有一篇專談MVC 3 Razor部分的額外部署需求,索性把兩篇的資料彙整在一起,經實測可行後,做個筆記: (雖然依Hanselman的說法,用XCOPY部署很遜,在此決定引用KISS法則,所以...)

在已安裝ASP.NET MVC的機器找到以下檔案(32位元OS則在C:\Program Files (x86)\Microsoft ASP.NET目錄),把它們Copy到部署機器的BIN目錄下就OK囉! (注意: 主機IIS要安裝SP.NET 4.0,網站也要設定使用ASP.NET 4.0)

C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies

  • System.Web.Helpers.dll
  • System.Web.Razor.dll
  • System.Web.WebPages.dll
  • System.Web.WebPages.Razor.dll
  • System.Web.WebPages.Deployment.dll
  • Microsoft.Web.Infrastructure.dll

C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies

  • System.Web.Mvc.dll
    (Phil文章中提到的System.Web.Abstractions.dll, System.Web.Extensions.dll, System.Web.Routing.dll在.NET Framework 4.0已屬內建)

在部署主機的ASP.NET MVC 3的網站程式BIN目錄補上這些檔案,就可以順利運作囉!


Comments

# by Ken

黑暗大, 剛好在找相關資訊, 發現保哥的文章有更簡便的方法: http://blog.miniasp.com/post/2011/08/22/How-to-Publish-a-Bin-Deployable-ASPNET-MVC-website.aspx

Post a comment