2013-02-20 11 views

回答

1

望着ControllerBase.FindView源代碼ViewEngineCollection.FindViewVirtualPathProviderViewEnginePrecompiledMvcEngine後的機器上,發現_mappings在PrecompiledMvc​​Engine有0計數(Tx至反射和開源。)

原因是沒有類型可分配給我的項目的DLL中的WebPageRenderingBase。反編譯我的dll時,它實際上具有編譯的視圖,並且從WebPageRenderingBase擴展視圖。

在編寫單元測試來完成PrecompiledMvc​​Engine加載視圖所做的相同事情後,發現它們使用的是WebPageRenderingBase類的不同版本。 RazorGenerator.Mvc在構建時使用System.Web.WebPages v1.0.0.0進行預編譯。從編譯程序集加載類型時,PrecompiledMvc​​Engine使用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文件中指定正確的版本,則通常會遇到此問題

相關問題