Microsoft Web API於Windows Server 2008 R2之手動部署

當你在Visual Studio上面快樂的使用NuGet來抓取各式有用的套件,並且快樂的開發完成後,通常你把這個應用程式搬到正式的Web Server一定會發生很不快樂的事。特別是對一個有潔癖,不喜歡用Code Behind(喜歡用Code Inline)來進行動態編譯,又喜歡手動進行複製貼上部署網站的程式設計師。

通常我開啟一個新專案,我的網站不會是範本型網站,而是全新的空白網站,然後在現代NuGet強大的威力下,你會開始一個個加裝套件,然後你會發現你的/bin/目錄開始慢慢的肥大,各式config開始擴增,其實NuGet在後面幫你覆寫、擴增、新增非常多你意想不到的官方、非官方DLL。這對我這種手動型設定的工程師來說,我不喜歡這樣的事情發生,我不喜歡一堆有的沒有的DLL,有可能是我沒有用到的東西,全部都放到/bin/裡面,這對我來說很困擾,因此我相當的討厭現在的.NET Framework / NuGet的開發方式,反而想念以前.Net Framework Redistributable Package裝一裝,Code複製過就就可以「部署完成」的年代。以現在Microsoft全面動員式的更新思維,我在想DLL的更新異動會更頻繁吧?因此何年何月才可以回到以前的完整安裝包年代,我想是遙遙無期了。

廢話不多說,如果你是跟我一樣的程式設計師,你在手動部署時一定會發現困難重重,所謂的重重就是你解完一件Bug就又會冒出另外一件Bug,然後你必需不斷的開web.config加入許多DLL的更新替換指令,大略是跟ASP.NET講說,某某DLL已經廢止,請參考到新版(2.0.0.0? 4.0.0.0)之類的某某DLL,在這邊就不詳列出來了。有的是.NET Framework提供的新擴充方法,但是(可能因為思維不同)被寫在別的Namespace裡面,例如要調用某些System.Web.Http下的新方法,其實該方法是被掛在(擴充在)新的System.Net.Http下。

總之在2013/11/25的此刻,如果你在不想修改任何的web.config的條件下,請按照我的方式來進行下列的動作,有可能可以一次性的解決你困難重重的問題。(或許日後就被解決了)

  1. 請更新到最新版本的.NET Framework 4.5,並到微軟的官方網站,下載 ASP.NET MVC4 獨立安裝檔,裝在你的Windows Server 2008 R2。(這個動作將會更新許多新的DLL到你的.NET Framework目錄)

  2. 請到你自己電腦的.NET目錄下,把你安裝過後的最新版本的DLL(以我的伺服器為例,是放在C:\Windows\Microsoft.NET\Framework64\v4.0.30319目錄下),複製到你的/bin/目錄下,這樣就可以不用改半行web.config,又可以順利運作了。(但這樣的缺點是日後你.NET的更新修補時,這個DLL不會被修補到)

要複製的DLL共計五個:

  1. Newtonsoft.Json.dll
  2. System.Net.Http.dll
  3. System.Net.Http.Formatting.dll
  4. System.Web.Http.dll
  5. System.Web.Http.WebHost.dll

透過這樣的方式,應該就可以解決99%你遇到的問題,除非你用到更特別的DLL,那我就沒辦法幫忙了,請自己從ErrorMessage挖出來吧!

.NET Framework MVC4 DLL web.config deploy