web-dev-qa-db-ja.com

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

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ステップ、ブール値および完了同期)

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

82
Nikos Baxevanis

Web.configに次を追加してみてください。

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

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

32
marcind

私も同じ問題を抱えていましたが、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に変更すること(新しいものを削除して追加すること)についてもメモに記載されていません。

102
Rolice

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

34
Steve 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に完全にアップグレードできるようになりますが、それはとにかくうまくいきませんでした。

5
laorient
  1. Visual Studioで、別のフォルダーに新しい「スローアウェイ」ASP.NET MVC 4アプリケーションを作成します。
  2. Viewsフォルダーのweb.configファイルを、新しい使い捨てアプリケーションから新しく作成されたViews web.configファイルに置き換えます。

君は気づくよ:

System.Web.WebPages.RazorからVersion=1.0.0.0からVersion=2.0.0.0System.Web.MvcからVersion=3.0.0.0からVersion=4.0.0.0

4
James Lawruk

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

3
user1047559

完全を期すために...

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

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

(カミソリビューとWebページの関係についてはまだ完全には明確ではありませんが、カミソリビューを使用するMVCアプリは、Webページが無効な状態でも機能するようです。)

0
Peter

また、最後のステップとして、エラーが発生しているプロジェクトからbinフォルダーをクリアします。

0
natdev1

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

そうは言っても、私は製品開発マシンでベータ版をセットアップすることは決してありませんでした。 VMを作成してイメージでベータ版を実行するのは簡単すぎます。Windows7以降では、必要に応じてパフォーマンスヒットを取得せずに金属からイメージを起動できます。それ(開発ツールのベータ版では、よくやる)。

0