0

を使用中InvalidOperationExceptionに MVC コントローラがしようとしたときに が発生しました。FindViewPrecompiledMvcEngine

VS2012、MVC4 を搭載し、IIS にデプロイされたマシンでの使用

4

1 に答える 1

1

ControllerBase.FindViewto ViewEngineCollection.FindViewto VirtualPathProviderViewEngine to PrecompiledMvc ​​Engineのソース コードを調べたところ、 PrecompiledMvc​​Engine のカウントが 0であることがわかりました_mappings。 (リフレクションとオープン ソースへの送信。)

その理由は、プロジェクトの DLL に WebPageRenderingBase に割り当て可能な Type がなかったためです。私のdllを逆コンパイルすると、実際にはコンパイルされたビューとWebPageRenderingBaseから拡張されたビューがありました。

PrecompiledMvc​​Engine がビューをロードするのと同じことを行う単体テストを作成した後、それらが異なるバージョンの WebPageRenderingBase クラスを使用していることがわかりました。RazorGenerator.Mvc は、ビルド時に System.Web.WebPages v1.0.0.0 を使用してプリコンパイルします。PrecompiledMvc​​Engine は、コンパイル済みアセンブリから型を読み込むときに 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 がインストールされているマシンにプリコンパイル済みビューを展開している場合によく直面します。

于 2013-02-20T03:43:42.003 に答える