ASP.NET MVC 3を搭載したマシンにASP.NET MVC 4ベータ版をインストールすると、次の例外が発生します。
System.InvalidCastExceptionはユーザーコードMessage = [A] System.Web.WebPages.Razor.Configuration.HostSectionによって処理されなかったため、[B] System.Web.WebPages.Razor.Configuration.HostSectionにキャストできません。タイプAは、「System:Web.WebPages.Razor、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = 31bf3856ad364e35」から発生し、コンテキスト「Default」の場所「C:\ Windows\Microsoft.Net\Assembly\GAC_MSIL\System .Web.WebPages.Razor\v4.0_1.0.0.0__31bf3856ad364e35\System.Web.WebPages.Razor.dll '。タイプBは、「System.Web.WebPages.Razor、Version = 2.0.0.0、Culture = neutral、PublicKeyToken = 31bf3856ad364e35」から発生し、コンテキスト「Default」の場所「C:\ Windows\Microsoft.Net\Assembly\GAC_MSIL\System .Web.WebPages.Razor\v4.0_2.0.0.0__31bf3856ad364e35\System.Web.WebPages.Razor.dll '。 Source = System.Web.WebPages.Razor
スタックトレース:
system.Web.WebPages.Razor.WebRazorHostFactory.GetRazorSection(String virtualPath)at System.Web.WebPages.Razor.WebRazorHostFactory.CreateHostFromConfig(String virtualPath、String physicalPath)at System.Web.WebPages.Razor.RazorBuildProvider.GetHostFromConfig() System.Web.WebPages.Razor.RazorBuildProvider.CreateHost()at System.Web.WebPages.Razor.RazorBuildProvider.EnsureGeneratedCode()at System.Web.WebPages.Razor.RazorBuildProvider.get_CodeCompilerType()at System.Web.Compilation.BuildProvider。 GetCompilerTypeFromBuildProvider(BuildProvider buildProvider)at System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders()at System.Web.Compilation.BuildProvidersCompiler.PerformBuild()at System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath)at System.Web.Compilation。 BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath、Boolean noBuild、Boolean allowCrossApp、Boolean allowBuildInPrecompile、Boolean throwIfNotFound、Boolean ensureIsUpToDate)a System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath、HttpContext allowCrossApp、Boolean throwIfNotFound)System.Web.Mvc.BuildManagerWrapper.System.Web.Mvc.IBuildManager.FileExists(String virtualPath)at System.Web.Mvc.BuildManagerViewEngine.FileExists(ControllerContext controllerContext、String virtualPath)at System.Web.Mvc .VirtualPathProviderViewEngine.GetPathFromGeneralName(ControllerContext controllerContext、List`1 locations、String name、String controllerName、String areaName、String cacheKey、String []&searchedLocations)at System.Web.Mvc.VirtualPathProviderViewEngine.GetPath(ControllerContext controllerContext、String [] locations、 String [] areaLocations、String locationsPropertyName、S System.Web.Mvc.VirtualPathProviderViewEngine.FindView(ControllerContext controllerContext、String viewName、String masterName、Boolean useCache)のSystem.Web.Mvc.ViewEngineCollectionのtring name、String controllerName、String cacheKeyPrefix、Boolean useCache、String []&searchLocations)。 System.Web.Mvc.ViewEngineCollection.Find(Func`2 lookup、Boolean trackSearchedPaths)のSystem.Web.Mvc.ViewEngineCollection.FindView(ControllerContext controllerContext、String viewName、String masterName)の<> c__DisplayClassc.b__b(IViewEngine e) System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)の.Web.Mvc.ViewResult.FindView(ControllerContext context)System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext、ActionResult actionResult)のSystem.Web.Mvc。 ControllerActionInvoker。<> c__DisplayClass1c.b__19()at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter、ResultExecutingContext preContext、Fun c.1継続)System.Web.Mvc.ControllerActionInvoker。<> c__DisplayClass1c。<> c__DisplayClass1e.b__1b()at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext、IList`1 filters、ActionResult actionResult)at System。 Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext、String actionName)at System.Web.Mvc.Controller.ExecuteCore()at [project_namespace] .Controllers.GlobalizationController.ExecuteCore()in [file_path] at System.Web.Mvc.ControllerBase System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext)のSystem.Web.Mvc.MvcHandler。<> c__DisplayClass6。<> c__DisplayClassb.b__5()の.Execute(RequestContext requestContext) .Web.Mvc.Async.AsyncResultWrapper。<> c .__ DisplayClass1.b__0()at System.Web.Mvc.Async.AsyncResultWrapper。<> c__DisplayClass8`1.b__7(IAsyncResult _)at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult System.Web.Mvc.MvcHandlerの `1.End() 。<> c__DisplayClasse.b__d()at System.Web.Mvc.SecurityUtil.b__0(Action f)at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action)at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()at System.Web.HttpApplication.ExecuteStep(IExecutionStepステップ、ブール値および完了同期)
これにより完全にブロックされ、ベータ版を保持したいのですが、例外を取り除くためにベータ版を完全に削除する必要があるかもしれません。
Web.configに次を追加してみてください。
<appSettings>
<add key="webpages:Version" value="1.0.0.0"/>
</appSettings>
この問題は、登録されている複数のビルドプロバイダーと最新の勝利が原因である可能性があります。
私も同じ問題を抱えていましたが、ASP.NET MVC 3をASP.NET MVC 4に移行したとき、このトピックに到達しました。この問題の解決策を見つけましたが、そのソースは異なり、WebPages
バージョンのものではありません。
私は公式ガイドに従いました(つまり) ASP.NET MVC 3プロジェクトをASP.NET MVC 4にアップグレードする 。
この問題を解決するには、Web.Configに追加する必要があります(おそらく以前に追加したものを中心に):
<runtime><!-- Should be there by default, near end -->
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1"><!-- Should be there by default -->
<dependentAssembly>..</dependentAssembly><!-- Should be there by default -->
... some other dependecy redirects ...
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages.Razor"
publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
</dependentAssembly>
... some other dependency redirects ...
</assemblyBinding>
</runtime>
また、System.Web.HelpersのReferenceを1.0.0.0から2.0.0.0に変更すること(新しいものを削除して追加すること)についてもメモに記載されていません。
もう一つの、かなり遅い解決策...私はこの同じ問題に出くわしました。ここにリストされているすべての修正を行いました(ありがとうございました!!!)が、エラーを乗り越えることができませんでした。最後に、必死になって、Viewsディレクトリにweb.configファイルを見つけました。このファイルで、System.Web.Mvcのバージョンへのいくつかの参照を見つけ、それらをすべて「4.0.0.0」に上げました。さらに重要なことに、次の行を見つけて、「system.web.webPages.Razor」のバージョン番号を「1.0.0.0」から「2.0.0.0」に更新しましたが、突然すべてが再び機能しました。うまくいけば、これは他の誰かを助けるでしょう。
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="Host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
スティーブ・G.
MVC 2からMVC 3へのアップグレードに関する台湾人のブログに沿って、これを機能させる別の方法を見つけました http://blog.kkbruce.net/2011_04_01_archive.html (実際にできますIE10のMicrosoft Translateを使用して英語版を表示します。これはかなり良い翻訳です...)
秘Theは、MVC3に関連するすべてのバージョン(Razor、Mvc、Helperアセンブリなど)を見つけて、参照に移動して、参照されるアセンブリのすべての新しいバージョンをチェックアウトすると、それらが何であるかを知ることです1.0.0.0から2.0.0.0および3.0.0.0から4.0.0.0(公開鍵は同じであるため)。ブログに従ってバージョンを削除してみることもできます。
別の重要なことは、これらの設定がすべてのWeb.Configsにあることです。ルートの下だけでなく、ビュー、エリア/ {エリア} /ビューなどの下でも.
このソリューションを使用すると、ハイブリッドを使用する代わりにMVC4に完全にアップグレードできるようになりますが、それはとにかくうまくいきませんでした。
君は気づくよ:
System.Web.WebPages.Razor
からVersion=1.0.0.0
からVersion=2.0.0.0
System.Web.Mvc
からVersion=3.0.0.0
からVersion=4.0.0.0
この問題が発生し、上記の解決策を試してもうまくいかない場合は、Viewsフォルダーのweb.configを確認してください。アプリのルートフォルダー内のWeb.configファイルと競合している構成がある場合があります
完全を期すために...
Webページを使用していない場合は、完全にオフにすることもできます。
<appSettings>
<add key="webpages:Enabled" value="false" />
</appSettings>
(カミソリビューとWebページの関係についてはまだ完全には明確ではありませんが、カミソリビューを使用するMVCアプリは、Webページが無効な状態でも機能するようです。)
また、最後のステップとして、エラーが発生しているプロジェクトからbinフォルダーをクリアします。
一部のコードは現在のMVCビットで実行されていますが、他のコードは新しいMVCビットにプッシュされています。コードを理解しないと、どの特定のビットが問題の原因なのかを説明できません。
そうは言っても、私は製品開発マシンでベータ版をセットアップすることは決してありませんでした。 VMを作成してイメージでベータ版を実行するのは簡単すぎます。Windows7以降では、必要に応じてパフォーマンスヒットを取得せずに金属からイメージを起動できます。それ(開発ツールのベータ版では、よくやる)。