把Asp.net MVC4.0(net framework4.5) 部署到window server 2003上的解決方案
最近做了一個Web項目,也沒多想就用了Asp.net MVC4.0 ,MVC4.0默認的目標framework是4.5版本,等開發完畢才發現,將要部署的現有服務器是Window server 2003,沒有window 2008。
但是Net Framework4.5是不支持安裝在window server 2003上。 這中間還去機房折騰過,折騰的事情就不說了。
今天早上來公司就開始研究如何把Asp.net MVC4.0 (Net Framework4.5)部署到現在有window server 2003上。從早上一直到下午6點,一直不成功,各種錯誤,都快准備放棄了,突然就成了。。。
本文簡單記錄一下今天的操作步驟,也參考、綜合了網上各種方案。
一。window server 2003 環境配置
參考來源:http://www.cnblogs.com/gesenkof99/archive/2013/04/22/3035436.html
window server 2003 上的IIS6就不用說了,肯定會有
1.安裝Net Framework 4.0.去微軟官網下載一個版本就行
但是其實安裝不上的。。。會提示缺少組件,這里需要事先安裝兩個組件,安裝過程幸虧不需要重啟服務器。
WindowsServer2003-KB968930-x86-CHS.exe,PowerShell 2.0的補丁(下載地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=4045)
wic_x86_chs.exe,windows圖像處理組件(下載地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=32)
下載安裝過着兩個組件之后,再安裝Net Framework4.0
2.安裝Asp.netMVC4 http://www.microsoft.com/en-us/download/details.aspx?id=30683
有的技術網友說需要注冊一下iis,但是我沒有注冊,命令如下:C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
二。 在IIS中部署注冊MVC站點
這個網友的寫的比較詳細,我就不貼了。
http://www.cnblogs.com/anny-1980/articles/2616657.html
三。把解決方案內每個項目的目標框架framework4.5 變成Net framework4.0
對項目右鍵--屬性--應用程序,把目標框架變成Net framework 4。
如果你的解決方案里面還有其他類庫或者其他引用的項目都要進行這一步的操作。
這一步看起來很簡單,其實最復雜,不光要把解決方案內的項目都變成Net framework4.0,還要把引用的第三方類庫都變成Net framework4.0版本。這是一個最大的問題,因為MVC4本身就有大量的dll,即使你沒用,也都引用到項目中
在MVC4的Netframework4.5版本中生成的dll,都要變成相匹配的Net framework4.0版本,我就是在這個上面花費大量的時間,具體解決后面再說。
項目編譯發布就放到window 2003的環境下,結果各種報錯。。。
1.Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute' from assembly 'mscorlib
2.Could not load file or assembly 'DotNetOpenAuth.Core‘
搜索了各種資料,有價值的包括這些
www.microsoft.com/zh-cn/download/details.aspx?id=30683
大概意思還是 是把net framework4.5 變成net framework4.0過程中產生方法或者dll不匹配的問題。但是沒有明確的解決方案,或者我參照做了,還是不成功。
中間我嘗試過把不相關的dll都刪除的方法,還是不行,從引用里面和配置文件里面刪除了,都不行(但是在本機window 7環境中是正常)。
反正最后的焦點都集中在dll不匹配的問題中,每個項目的目標框架都變成了Net framework4.0,但是還有很多引用的dll還是net framework4.5的版本。但是也無從查證哪些是
於是我根據經常報錯的幾個dll信息。
例如“Could not load file or assembly 'DotNetOpenAuth.Core”
我仍然新建了一個Asp.net MVC4.0的項目,但是Net framework特地選的是4.0的版本。
從新生成的項目的Bin文件夾中,把DotNetOpenAuth 相關的Dll都拷貝老的項目Bin文件夾中,結果問題就真的解決。
如果還有其他dll也報類似的錯誤,從net framework4.0版本的項目拷貝出來應該也可以解決類似的問題。