Il sito ha smesso di funzionare in asp.net Impossibile eseguire il cast di System.Web.WebPages.Razor.Configuration.HostSection


115

Ho un problema come questo sul server

Impossibile eseguire il cast di [A] System.Web.WebPages.Razor.Configuration.HostSection a [B] System.Web.WebPages.Razor.Configuration.HostSection. Il tipo A proviene da "System.Web.WebPages.Razor, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35" nel contesto "Default" nella posizione "C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll'. Il tipo B deriva da "System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35" nel contesto "Default" nella posizione "C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll'.

Descrizione: si è verificata un'eccezione non gestita durante l'esecuzione della richiesta Web corrente. Esaminare l'analisi dello stack per ulteriori informazioni sull'errore e sulla sua origine nel codice.

Dettagli eccezione: System.InvalidCastException: Impossibile eseguire il cast di [A] System.Web.WebPages.Razor.Configuration.HostSection a [B] System.Web.WebPages.Razor.Configuration.HostSection. Il tipo A proviene da "System.Web.WebPages.Razor, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35" nel contesto "Default" nella posizione "C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll'. Il tipo B deriva da "System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35" nel contesto "Default" nella posizione "C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll'.

Errore di origine:

Ho installato MVC 3 sul server e sul mio computer. Ho provato a sostituirlo con una base di codice vecchia di 15 giorni ma esiste lo stesso problema.

ora voglio risolverlo. Qualcuno sa come posso aggiustarlo.


Sembra che nella tua applicazione alcuni assembly abbiano dipendenze da diverse versioni di razor. Prova a ispezionare i tuoi assembly con ildasm o .NET Reflector per vedere le sue dipendenze.
Paulo Morgado

Risposte:


200

Nella radice Web.config assicurarsi che assemblyBinding contenga la versione corretta per l'assembly "System.Web.WebPages.Razor" e "System.Web.Mvc". Verificare la loro effettiva esistenza così come il mio tag assembly "System.Web.WebPages.Razor" mancava causando l'errore. Al momento della stesura di questo articolo, le versioni dell'assembly erano impostate rispettivamente su 3.0 e 5.0 con aggiornamenti NuGet completi. Il codice dovrebbe essere simile a quello riportato di seguito. Il publicKeyToken rimarrà lo stesso tra le versioni. Saluti!

<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
Ha funzionato per me. Mi mancavano le informazioni su Razor e MVC ha indicato la versione sbagliata.
Hoakie

Stessa situazione di @Hoakie - Razor aggiornato a 3.0.0 e MVC a 5.0.0 e non c'era alcun riferimento all'Assembly dipendente da Razor, e MVC diceva ancora oldVersion = "1.0.0.0-4.0.0.0" newVersion = "4.0.0.0". Aggiunto l'XML di assemblaggio dipendente da Razor sopra e modificato da 4.0.0.0 a 5.0.0.0 e lo zio di Bob.
Scott Baker

2
Questo ha funzionato per me grazie. Avevo "System.Web.WebPages" con le associazioni corrette ma non funzionava finché non ho aggiunto anche la chiave Razor. Tuttavia in altri progetti non ho dovuto farlo, non sono sicuro di quale sia la differenza e del motivo per cui gli attacchi di classe superiore non avrebbero funzionato per Razor. Qualcuno sa la risposta?
Shane

Anch'io. Ho la voce MVC ma non quella Razor. Ora funziona. Grazie.
Yves Tkaczyk


40

Il mio caso stava passando da mvc4 a mvc5.

Mi sono assicurato che i miei riferimenti fossero sincronizzati (con un'app mvc5 appena creata), ho aggiornato di conseguenza il file web.config e ancora non funzionava. Alla fine ha funzionato quando ho cambiato il mio file web.config ( INSIDE THE VIEWS directory ) da:

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

A questa:

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

RICORDA: interrompi iis (express o nativo), pulisci la soluzione, compila ed esegui.


Penso che questa risposta dovrebbe essere una risposta in realtà. Il binding dell'assembly è generalmente corretto quando si utilizza l'approccio del pacchetto di aggiornamento per l'aggiornamento da mvc4 a mvc5.
Roman

34

Nel caso in cui la risposta di ian non fosse sufficiente (e gli assembly corretti, ma il casting è ancora sbagliato) è probabile che tu non abbia aggiornato il <configSections>per riflettere ancora il nuovo assembly. assicurarsi che la parte dell'assembly faccia riferimento anche alla versione 3.0 della System.Web.WebPages.Razorlibreria. per esempio

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

(Notare che version=3.0.0ora fanno tutti riferimento )


8
Aggiungerei solo che se non riesci a trovare queste impostazioni nella radice Web.Config, controlla anche Web.Config nella cartella Views.
gligoran

4
Sì, il problema era la cartella Views web.config per me.
Matthew Nichols,


1

Questo problema è molto comune quando si sviluppa per MVC 4 e quindi si installa all'improvviso un pacchetto disponibile nella versione più recente in modo che interrompa l'intera applicazione.

L'unica soluzione a questo problema è aggiornare l'intera applicazione a una versione più recente o installare il vecchio pacchetto compatibile con l'applicazione


1

Problema:

Impossibile eseguire il cast di [A] System.Web.WebPages.Razor.Configuration.HostSection a [B] System.Web.WebPages.Razor.Configuration.HostSection. Il tipo A proviene da "System.Web.WebPages.Razor, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35" nel contesto "Default" nella posizione "C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll'. Il tipo B deriva da "System.Web.WebPages.Razor, Version = 3.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35" nel contesto "Default" nella posizione "C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ File temporanei ASP.NET \ rbs.ceds.todomvcdemo \ 73d0b7c7 \ 46e3986d \ assembly \ dl3 \ 21020800 \ 101279fc_da94cf01 \ System.Web.WebPages.Razor.dll '.

Identificazione:

L'errore è con il file di configurazione cioè web.config del tuo progetto.

Qui troverai che la versione di Razor è impostata su 2.0.0.0 dove come nel tuo progetto la versione 2.0.0.0 non è disponibile.

Soluzione:

È semplice, basta cambiare la versione da 2.0.0.0 a 3.0.0.0 e farà la magia.

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 , Versione = 3.0.0.0

Non è necessario inserire il reindirizzamento o giù di lì perché renderà le cose complicate.


0

Ho trovato un problema e una soluzione.

1 Indirizzo il mio codice a 4.0, quindi carico il codice e funziona. Prima aggiorno anche il mio codice ad asp.net MVC 4.

ora è lavoro :)


3
Potresti essere più specifico?
nwayve

0

Apri la posizione dei due file dll nel tuo sistema, copia una delle dll nella tua posizione del file nell'altra
e prova a eseguire il progetto.


0

Un altro modo per risolvere questo problema, senza dover aggiornare i riferimenti, è questo

  <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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.