ASP.NET MVC 4 Betaのインストール後に、InvalidCastExceptionがスローされます


81

ASP.NET MVC3を搭載したマシンにASP.NETMVC 4 Betaをインストールした後、次の例外が発生します。

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()at System.Web.WebPages.Razor.RazorBuildProvider.get_CodeCompilerType()のSystem.Web.WebPages.Razor.RazorBuildProvider.get_CodeCompilerType()のSystem.Web.WebPages.Razor.RazorBuildProvider.EnsureGeneratedCode()のSystem.Web.WebPages.Razor.RazorBuildProvider.CreateHost() System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders()のGetCompilerTypeFromBuildProvider(BuildProvider buildProvider)、System.Web.Compilation.BuildManagerのSystem.Web.Compilation.BuildProvidersCompiler.PerformBuild()。System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath、Boolean noBuild、Boolean allowCrossApp、Boolean allowBuildInPrecompile、Boolean throwIfNotFound、Boolean sureIsUpToDate)at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext)のCompileWebFile(VirtualPath virtualPath) 、ブールnoBuild、ブールallowCrossApp、ブールallowBuildInPrecompile、ブールthrowIfNotFound、ブールensureIsUpToDate)at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath、HttpContext context、ブールallowCrossApp、ブールthrowIfNotFound)at System.Web.Mvc.BuildManagerWrapper.System System.Web.Mvc.BuildManagerViewEngineのWeb.Mvc.IBuildManager.FileExists(String virtualPath)。System.Web.Mvc.VirtualPathProviderViewEngine.GetPathFromGeneralName(ControllerContext controllerContext、List`1の場所、文字列名、文字列controllerName、文字列areaName、文字列cacheKey、文字列[]&searchedLocations)のFileExists(ControllerContext controllerContext、String virtualPath) Mvc.VirtualPathProviderViewEngine.GetPath(ControllerContext controllerContext、String [] location、String [] areaLocations、String locationPropertyName、String name、String controllerName、String cacheKeyPrefix、Boolean useCache、String []&searchedLocations)at System.Web.Mvc.VirtualPathProviderViewEngine.FindView (ControllerContext controllerContext、String viewName、String masterName、Boolean useCache)atSystem.Web.Mvc.ViewEngineCollection。<> c__DisplayClassc。System.Web.Mvc.ViewEngineCollection.FindView(Func`2 lookup、Boolean trackSearchedPaths)at System.Web.Mvc.ViewEngineCollection.FindView(ControllerContext controllerContext、String viewName、String masterName)atSystem.Web.Mvcのb__b(IViewEngine e) .ViewResult.FindView(ControllerContext context)at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext、ActionResult actionResult)atSystem.Web.Mvc.ControllerActionInvoker。<> System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter、ResultExecutingContext preContext、Func`1 continuation)のc__DisplayClass1c.b__19()atSystem.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)atSystem.Web。 System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext)atSystem.Web.Mvc.ControllerBase.System.Webの[file_path]の[project_namespace] .Controllers.GlobalizationController.ExecuteCore()のMvc.Controller.ExecuteCore()。 Mvc.IController.Execute(RequestContext requestContext)atSystem.Web.Mvc.MvcHandler。<> c__DisplayClass6。<> c__DisplayClassb.b__5()at System.Web.Mvc.Async.AsyncResultWrapper。<> c__DisplayClass1.b__0()atSystem。 Web.Mvc。Async.AsyncResultWrapper。<> c__DisplayClass8`1.b__7(IAsyncResult _)at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()atSystem.Web.Mvc.MvcHandler。<> c__DisplayClasse.b__d()at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action)at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action)at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)atSystem.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 step、Boolean&completedSynchronously)Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()atSystem.Web.Mvc.MvcHandler。<> c__DisplayClasse.b__d()at System.Web.Mvc.SecurityUtil.b__0(Action f)atSystem.Web。 System.Web.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)atSystem.Web.HttpApplicationのMvc.SecurityUtil.ProcessInApplicationTrust(Action action) System.Web.HttpApplication.ExecuteStep(IExecutionStep step、Boolean&completedSynchronously)のCallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()atSystem.Web.Mvc.MvcHandler。<> c__DisplayClasse.b__d()at System.Web.Mvc.SecurityUtil.b__0(Action f)atSystem.Web。 System.Web.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)atSystem.Web.HttpApplicationのMvc.SecurityUtil.ProcessInApplicationTrust(Action action) System.Web.HttpApplication.ExecuteStep(IExecutionStep step、Boolean&completedSynchronously)のCallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(アクションアクション)のb__0(アクションf)System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)のSystem.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest( IAsyncResult結果)at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()at System.Web.HttpApplication.ExecuteStep(IExecutionStep step、Boolean&completedSynchronously)System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(アクションアクション)のb__0(アクションf)System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)のSystem.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest( IAsyncResult結果)at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()at System.Web.HttpApplication.ExecuteStep(IExecutionStep step、Boolean&completedSynchronously)System.Web.HttpApplication.ExecuteStep(IExecutionStep step、Boolean&completedSynchronously)のHttpApplication.IExecutionStep.Execute()System.Web.HttpApplication.ExecuteStep(IExecutionStep step、Boolean&completedSynchronously)のHttpApplication.IExecutionStep.Execute()

これは私を完全にブロックし、ベータ版を維持したいのですが、例外を取り除くために完全に削除する必要があるかもしれません。


1
万が一、.net 4.5 Devプレビューを実行していますか?(1が現在のベータバージョンとの互換性がないこと)(ちょうどレコードについて、downvoted私にはなかった、質問が正当なものである)
マイケル・Stum

1
いいえ、4.5はまったく実行していません。
Nikos Baxevanis 2012

3
真剣に、なぜこれが反対票を投じられるのですか?他の人に起こるかもしれない何かについてのフィードバックを提供します。
Nikos Baxevanis 2012

@MichaelStumOK心配ありません。:)
Nikos Baxevanis 2012

混乱させて申し訳ありません。私はこの質問を「お気に入り」にしようとしていて、誤ってクリックした= P反対票が削除され、今回はお気に入りが正しく追加されました。
Josh Darnell

回答:


31

web.configに以下を追加してみてください。

<appSettings>
  <add key="webpages:Version" value="1.0.0.0"/>
</appSettings>

この問題は、複数のビルドプロバイダーが登録されており、最新の勝利が原因である可能性があります。


101

同じ問題が発生しましたが、ASP.NET MVC3をASP.NETMVC 4に移行するときに、このトピックに取り組みました。私は問題の解決策を見つけましたが、そのソースは異なり、WebPagesバージョンからではありません。

ASP.NET MVC3プロジェクトをASP.NETMVC 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の参照を1.0.0.0から2.0.0.0に変更する(新しいものを削除して追加する)ことについても、注記には記載されていません。


2
+1共有してくれてありがとう。私が行ったわずかなバリエーションの1つoldVersion="1.0.0.0-2.0.0.0"は、MVC4プロジェクトテンプレートで使用されている規則に従うためだけに使用することでした。興味深いことに、dependentAssemblyforSystem.Web.WebPages.RazorはMVC4プロジェクトテンプレートのルートWeb.configにもありません。
Scotty.NET 2013

1
MVC 4 NuGetパッケージを5.1.1に更新するときに同様の問題が発生しましたが、上記で解決しましたがoldVersion="2.0.0.0" newVersion="3.0.0.0"
Luke Puplett 2014年

34

もう1つ、かなり遅い解決策...私はこれと同じ問題に遭遇しました。ここにリストされているすべての修正を行いましたが(ありがとうございました!!!)、エラーを乗り越えることができませんでした。最後に、必死になって、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。


1
Areasを使用している場合は、Areas / Viewsの下のweb.configも忘れないでください。
アントニンジェリネック2013

5

これを機能させる別の方法を見つけました。MVC2からMVC3へのアップグレードに関する台湾人のブログに沿ってhttp://blog.kkbruce.net/2011_04_01_archive.html(IE10でMicrosoftTranslateを実際に使用して確認できます)英語版で、かなり良い翻訳です...)

秘訣は、MVC3に関連するすべてのバージョン(Razor、Mvc、Helperアセンブリなど、参照に移動して参照されたアセンブリのすべての新しいバージョンを確認すると、それらが何であるかがわかります)を見つけて変更することです。 1.0.0.0から2.0.0.0および3.0.0.0から4.0.0.0(公開鍵が同じであるため)。ブログに従ってバージョンを削除してみることもできます。

もう1つの重要なことは、これらの設定がすべてのWeb.Configにあることです。つまり、ルートの下だけでなく、View、Area / {Area} / Viewなどの下にもあります。

このソリューションでは、ハイブリッドを使用する代わりにMVC4に完全にアップグレードできると思いますが、とにかく機能しませんでした。


4
  1. Visual Studioで、新しい「使い捨て」ASP.NET MVC4アプリケーションを別のフォルダーのどこかに作成します。
  2. Viewsフォルダー内のweb.configファイルを、新しい使い捨てアプリケーションから新しく作成したViewsweb.configファイルに置き換えます。

あなたが気づくでしょう:

System.Web.WebPages.Razor以下からの変更Version=1.0.0.0Version=2.0.0.0 System.Web.Mvcの変更Version=3.0.0.0Version=4.0.0.0


3

この問題が発生していて、上記の解決策を試してもこれが機能しない場合は、Viewsフォルダーのweb.configを確認してください。アプリのルートフォルダー内のWeb.configファイルと競合する構成がいくつかある可能性があります


0

コードの一部は現在のMVCビットで実行されていますが、他のコードは新しいものにプッシュされています。コードを理解しないと、問題の原因となっている特定のビットを特定できません。

そうは言っても、本番開発マシンにベータ版を設定することは決してありません。最近のVMを作成して、イメージでベータ版を実行するのは簡単すぎます。Windows 7以降では、必要に応じて、メタルからイメージを起動し、パフォーマンスヒットを取得しないようにすることができます(開発ツールのベータ版では、多くの場合そうします)。


はい。ただし、このベータ版には稼働ライセンスがあります。結局のところ、それはとにかくVM上だがVMもASP.NET MVC 3持っている
ニコスBaxevanis

3のどのビットが4で実行されているかを判別する必要があります。これは、競合が発生している場所だからです。同じことがWebフォームでも.NET2のタイムフレームに移行したときにかなり発生し、アドオン(MVCなど)ではかなりの問題でした。
グレゴリーAビーマー2012

実際、これは非常に大きなASP.NET MVC3プロジェクトです。4では何も実行されていません。3つのプロジェクトをすべて開始できませんでした。appSettings要素に<addkey = "webpages:Version" value = "1.0.0.0" />を追加すると解決しました。
Nikos Baxevanis 2012

0

完全を期すために...

Webページを使用していない場合は、Webページを完全にオフにすることもできます。

<appSettings>
    <add key="webpages:Enabled" value="false" />
</appSettings>

(かみそりのビューとWebページの関係についてはまだ完全にはわかりませんが、かみそりのビューを備えたMVCアプリは、Webページを無効にしても引き続き機能するようです。)


0

また、最後の手順として、エラーの発生元のプロジェクトからbinフォルダーをクリアします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.