當使用PrecompiledMvcEngine
時,MVC控制器嘗試使用FindView
時,我得到了一個InvalidOperationException
。使用PrecompiledMvcEngine FindView拋出InvalidOperationException異常並查找查看cshtml文件
使用具有VS2012,MVC4並部署到IIS
當使用PrecompiledMvcEngine
時,MVC控制器嘗試使用FindView
時,我得到了一個InvalidOperationException
。使用PrecompiledMvcEngine FindView拋出InvalidOperationException異常並查找查看cshtml文件
使用具有VS2012,MVC4並部署到IIS
望着ControllerBase.FindView
源代碼ViewEngineCollection.FindView
到VirtualPathProviderViewEngine到PrecompiledMvcEngine後的機器上,發現_mappings
在PrecompiledMvcEngine有0計數(Tx至反射和開源。)
原因是沒有類型可分配給我的項目的DLL中的WebPageRenderingBase。反編譯我的dll時,它實際上具有編譯的視圖,並且從WebPageRenderingBase擴展視圖。
在編寫單元測試來完成PrecompiledMvcEngine加載視圖所做的相同事情後,發現它們使用的是WebPageRenderingBase類的不同版本。 RazorGenerator.Mvc在構建時使用System.Web.WebPages v1.0.0.0進行預編譯。從編譯程序集加載類型時,PrecompiledMvcEngine使用System.Web.WebPages v2.0.0.0。通過改變我的MVC csproject在運行時加載v1.0.0.0來解決這個問題。
改變
<Reference Include="System.Web.WebPages" />
它撿起來2.0.0.0
<Reference Include="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
迫使它總是拿起1.0.0.0。如果您將預編譯視圖部署到安裝了VS2012和MVC4的計算機上,而無需在csproj文件中指定正確的版本,則通常會遇到此問題