一直以來,開發MVC3應用,在部署的時候爲了方便,並不在用戶環境安裝MVC3,只是把用到的幾個assembly直接部署到bin裏,包括:
ide
Microsoft.Web.Infrastructure.dll網站
System.Web.Helpers.dllspa
System.Web.MVC.dllxml
System.Web.WebPages.Deployment.dllci
System.Web.WebPages.dll開發
System.Web.WebPages.Razor.dll部署
最近系統升級,再這麼部署網站時,發現很差用了,報錯:it
Compiler Error Message: CS1705: Assembly 'TestUnsafe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' uses 'System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35' which has a higher version than referenced assembly 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' |
發現沒?System.Web.MVC的版本要求是3.0.0.1,而bin裏放的仍然是3.0.0.0,確定跑不起來。OK,換個新的程序集上去,把System.Web.MVC.dll 3.0.0.1版放上去,仍然跑不起來,報錯:io
Parser Error Message: Could not load file or assembly 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) |
這是因爲Web.config未更新致使的,找到下面的幾行:
asm
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime>
調整oldVersion和newVersion,改爲:
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.1" /> </dependentAssembly> </assemblyBinding> </runtime>
看到沒?把舊版本的MVC統一映射到3.0.0.1版去。再訪問站點,一切正常了。