を使用中InvalidOperationException
に MVC コントローラがしようとしたときに が発生しました。FindView
PrecompiledMvcEngine
VS2012、MVC4 を搭載し、IIS にデプロイされたマシンでの使用
を使用中InvalidOperationException
に MVC コントローラがしようとしたときに が発生しました。FindView
PrecompiledMvcEngine
VS2012、MVC4 を搭載し、IIS にデプロイされたマシンでの使用
ControllerBase.FindView
to ViewEngineCollection.FindView
to VirtualPathProviderViewEngine to PrecompiledMvc Engineのソース コードを調べたところ、 PrecompiledMvcEngine のカウントが 0であることがわかりました_mappings
。 (リフレクションとオープン ソースへの送信。)
その理由は、プロジェクトの DLL に WebPageRenderingBase に割り当て可能な Type がなかったためです。私のdllを逆コンパイルすると、実際にはコンパイルされたビューとWebPageRenderingBaseから拡張されたビューがありました。
PrecompiledMvcEngine がビューをロードするのと同じことを行う単体テストを作成した後、それらが異なるバージョンの WebPageRenderingBase クラスを使用していることがわかりました。RazorGenerator.Mvc は、ビルド時に System.Web.WebPages v1.0.0.0 を使用してプリコンパイルします。PrecompiledMvcEngine は、コンパイル済みアセンブリから型を読み込むときに System.Web.WebPages v2.0.0.0 を使用します。実行時に v1.0.0.0 もロードするように MVC csproject を変更することで、これを修正しました。
かわった
<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 を取得するように強制します。この問題は、csproj ファイルで正しいバージョンを指定せずに、VS2012 および MVC4 がインストールされているマシンにプリコンパイル済みビューを展開している場合によく直面します。