MVC3 0部署問題小結

2022-11-24 21:31:59 字數 1726 閱讀 1106

環境:mvc3.0,iis7

mvc3.0的部署除像正常部署aspx程式一樣外,另外還需要注意的幾點: 

1. 安裝mvc3.0

確保伺服器上安裝了mvc3.0,預設版本是“3.0.20105.0”

2. mvc版本一致性問題(重要)

此類問題會引起一堆譬如cs1705,cs0433類的問題,我就是碰到了這種問題,所以就這個問題詳細說明一下:

此問題需要檢視你本機開發時用的mvc類庫版本與伺服器上所安裝的mvc類庫版本是否一致,即使大版本號都是3.0,而小版本號不一致也會導致此類問題

mvc的版本號可通過控制面版上“microsoft asp.net mvc 3”一行後面的版本來確定,我本機上的版本是“3.0.50813.0”,而伺服器上的版本卻是“3.0.20105.0”,因此就出現了版本不一致的問題

預設安裝mvc3後的版本是“3.0.20105.0”,而版本“3.0.50813.0”是microsoft針對mvc安全性發布的一個更新補丁包,如果你是剛裝的mvc,一般情況下“3.0.20105.0”,過段時間通過windows的自動更新可能就會變成“3.0.50813.0”,所以這個版本問題不容易被發現

針對mvc的安全補丁說明:ms14-059 (kb2990942) 

此補丁是一個集合補丁,裡面包含了對 mvc 2.0、mvc 3.0、mvc 4.0、mvc 5.0 和 mvc 5.1的補丁

如果只需針對mvc3.0打補丁,則只需通過選擇更新相應的補丁包即可,針對mvc3.0補丁包的名稱其實為:kb2993937

由此即可解決版本問題

其它網上總結的也需要注意的,我沒有碰到或者是有些配置本已整合了的:

1. 設定system.web.mvc.dll複製到本地(重要)

在vs的引用中右鍵system.web.mvc.dll,選擇“屬性”->“複製到本地”選擇true,重新編譯併發布

其實就是要帶著本機的system.web.mvc.dll釋出

我沒有這麼做,**仍然可以訪問,不過這條應該很重要,建議釋出mvc時選擇這項

2. 設定“isapi和cgi限制”

左鍵點選iis根結節,在右側的功能區選擇“isapi和cgi限制”,點開,將asp.net v4.0.30319設定為允許,如果是64位系統應該有兩條記錄,一條是64位的,一條是32位的,反正我的都是不允許也照樣可以

3. 檢查“處理程式對映”

檢查“處理程式對映”,看裡面是不是有以下這三項:

extensionlessurlhandler-integrated-4.0  

extensionlessurlhandler-isapi-4.0_32bit  

extensionlessurlhandler-isapi-4.0_64bit    

如果缺少請在命令列中執行:  

c:\windows\microsoft.net\framework\v4.0.30319\aspnet_regiis.exe -i

我的預設是有這三項的

4. 設定“處理程式對映”

請求路徑:*

可執行檔案:c:\windows\microsoft.net\framework\v4.0.30319\aspnet_isapi.dll

名稱:可自己決定,一般填mvc3即可

我的這項也沒有設定,**仍然可以使用

mvc3部署到mono上面遇到的問題

1 經過實驗,發現mono下只要是post請求,就無法通過request獲取值,因為request.form.keys.count總是為0,拋開apache直接執行xsp4也存在同樣的問題,由於mvc版httpcontext的獲取在mvc3的相關類庫中進行,而system.web.mvc是私有部署的...