asp.netでサイトが機能しなくなったSystem.Web.WebPages.Razor.Configuration.HostSectionをキャストできません


115

サーバーでこのような問題があります

[A] System.Web.WebPages.Razor.Configuration.HostSectionを[B] System.Web.WebPages.Razor.Configuration.HostSectionにキャストできません。タイプAは「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 '。タイプBは、「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 '。

説明:現在のWebリクエストの実行中に未処理の例外が発生しました。エラーの詳細と、コードのどこで発生したかについて、スタックトレースを確認してください。

例外の詳細:System.InvalidCastException:[A] System.Web.WebPages.Razor.Configuration.HostSectionを[B] System.Web.WebPages.Razor.Configuration.HostSectionにキャストできません。タイプAは「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 '。タイプBは、「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 '。

ソースエラー:

サーバーとコンピューターにMVC 3をインストールしました。私はそれを15日間古いコードベースで置き換えることを試みましたが、同じ問題が存在します。

今私はそれを解決したいと思います。誰かが私がそれを修正する方法を知っていますか?


あなたのアプリケーションでは、いくつかのアセンブリがカミソリの異なるバージョンに依存しているようです。ildasmまたは.NET Reflectorを使用してアセンブリを調べて、その依存関係を確認してください。
Paulo Morgado 2013

回答:


200

ルートWeb.configで、assemblyBindingにアセンブリ「System.Web.WebPages.Razor」と「System.Web.Mvc」の適切なバージョンが含まれていることを確認します。それらの実際の存在と、「System.Web.WebPages.Razor」アセンブリタグが欠落していることを確認してエラーを引き起こしました。この記事の執筆時点では、完全なNuGet更新を使用して、アセンブリバージョンをそれぞれ3.0および5.0に設定しています。コードは次のようになります。publicKeyTokenはバージョン間で同じままです。乾杯!

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <!--some more bidings-->
  <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages.Razor"
            publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
  </dependentAssembly>

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
  </dependentAssembly>
<!--some more bidings-->
</assemblyBinding>

2
私のために働いた。Razor情報が欠落しており、MVCが間違ったバージョンを指していました。
Hoakie 2013年

@Hoakieと同じ状況-Razorを3.0.0に、MVCを5.0.0に更新し、Razor依存アセンブリの参照はなく、MVCはoldVersion = "1.0.0.0-4.0.0.0" newVersion = "4.0.0.0"とまだ言っています。上記のRazor dependentAssembly XMLを追加し、4.0.0.0を5.0.0.0に変更し、ボブの叔父を変更しました。
スコットベイカー

2
これは私のおかげでうまくいきました。正しいバインディングの「System.Web.WebPages」がありましたが、Razorキーも追加するまで機能しませんでした。ただし、他のプロジェクトではそうする必要はありませんでした。違いが何で、なぜスーパークラスバインディングがRazorを処理しないのかわかりません。誰かが答えを知っていますか?
シェーン

こっちも一緒。MVCエントリはありますが、Razorエントリはありません。これで動作します。ありがとうございました。
Yves Tkaczyk 2013年


40

私の場合は、mvc4からmvc5にアップグレードしていました。

私の参照が(新しく作成されたmvc5アプリと)同期していることを確認し、それに応じてweb.configファイルを更新しましたが、それでも機能しませんでした。私がweb.configファイル(VIEWSディレクトリ内)を次のように変更したときに、最終的に機能しました。

<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>

これに:

<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>

覚えておいてください:iis(エクスプレスまたはネイティブ)を停止し、ソリューションをクリーンアップし、ビルドして実行します。


この回答は実際には答えになるはずです。mvc4からmvc5へのアップグレードにupdate-packageアプローチを使用する場合、通常、アセンブリバインディングは問題ありません。
ローマ、

34

ianの答えが十分ではなかった場合(およびアセンブリは正しいが、キャストがまだ間違っている場合)は、まだ<configSections>新しいアセンブリを反映するようにを更新していない可能性があります。アセンブリ部分がSystem.Web.WebPages.Razorライブラリのバージョン3.0も参照していることを確認してください。例えば

<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
    <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" />
    <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" />
</sectionGroup>

(これらはすべてversion=3.0.0現在参照していることに注意してください)


8
ルートのWeb.Configでこれらの設定が見つからない場合は、ViewsフォルダーのWeb.Configも確認してください。
gligoran 2013

4
はい、問題はViewsフォルダーのweb.configでした。
マシューニコルズ

15

Ianのソリューションは1つのプロジェクトで機能しましたが、他のプロジェクトでは、MVC 5およびWeb API 2にアップグレードする方法のより完全な情報が必要です


この記事は私のためにそれをしました。ありがとう!
gligoran 2013

この記事には、最も正確で完全なアップグレードの説明が含まれていると思います。ありがとうございます。
ミハイルブリンチュク2014年

1

この問題は、MVC 4向けに開発していて、突然、新しいバージョンで利用可能なパッケージをインストールするときに非常によく見られるため、アプリケーション全体が壊れます。

このような問題の唯一の解決策は、アプリケーション全体を新しいものにアップグレードするか、アプリケーションと互換性のある古いパッケージをインストールすることです


1

問題:

[A] System.Web.WebPages.Razor.Configuration.HostSectionを[B] System.Web.WebPages.Razor.Configuration.HostSectionにキャストできません。タイプAは「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 '。タイプBは、「System.Web.WebPages.Razor、Version = 3.0.0.0、Culture = neutral、PublicKeyToken = 31bf3856ad364e35」のコンテキスト「Default」の「C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319」にあります。 \ Temporary ASP.NET Files \ rbs.ceds.todomvcdemo \ 73d0b7c7 \ 46e3986d \ assembly \ dl3 \ 21020800 \ 101279fc_da94cf01 \ System.Web.WebPages.Razor.dll '。

識別:

エラーは、構成ファイル、つまりプロジェクトのweb.configにあります。

ここでは、Razorのバージョンが2.0.0.0に設定されていることがわかりますが、プロジェクトでは2.0.0.0のバージョンは使用できません。

解決:

それは簡単で、バージョンを2.0.0.0から3.0.0.0に変更するだけで、魔法のように機能します。

type = "System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup、System.Web.WebPages.Razor、Version = 3.0.0.0 type =" System.Web.WebPages.Razor.Configuration.RazorPagesSection、System.Web.WebPages.Razor 、バージョン= 3.0.0.0

リダイレクトを行う必要はありません。複雑になるためです。


0

問題と解決策を見つけました。

1コードのターゲットを4.0にしてから、コードをアップロードすると、うまくいきました。その前に、コードをasp.net MVC 4に更新します。

今それは仕事です:)


3
もっと具体的に教えていただけますか?
nwayve 2013年

0

システムで2つのdllファイルの場所を開き、ファイルの場所にあるdllの1つを別の場所にコピー
して、プロジェクトを実行してみます。


0

参照を更新せずにこれを修正する別の方法はこれです

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Pages.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.2.0.0" newVersion="1.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.