Le site a cessé de fonctionner dans asp.net System.Web.WebPages.Razor.Configuration.HostSection ne peut pas être converti en

115

J'ai un problème comme celui-ci sur le serveur

[A] System.Web.WebPages.Razor.Configuration.HostSection ne peut pas être converti en [B] System.Web.WebPages.Razor.Configuration.HostSection. Le type A provient de 'System.Web.WebPages.Razor, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' dans le contexte 'Default' à l'emplacement 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '. Le type B provient de 'System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' dans le contexte 'Default' à l'emplacement 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '.

Description: une exception non gérée s'est produite lors de l'exécution de la requête Web actuelle. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

Détails de l'exception: System.InvalidCastException: [A] System.Web.WebPages.Razor.Configuration.HostSection ne peut pas être converti en [B] System.Web.WebPages.Razor.Configuration.HostSection. Le type A provient de 'System.Web.WebPages.Razor, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' dans le contexte 'Default' à l'emplacement 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '. Le type B provient de 'System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' dans le contexte 'Default' à l'emplacement 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '.

Erreur source:

J'ai installé MVC 3 sur le sereur et sur mon ordinateur. J'ai essayé de le remplacer par une base de code vieille de 15 jours mais le même problème existe.

maintenant je veux le résoudre. Quelqu'un sait-il comment je peux y remédier.

user2632851
la source
On dirait que dans votre application, certains assemblys ont des dépendances sur différentes versions de razor. Essayez d'inspecter vos assemblys avec ildasm ou .NET Reflector pour voir ses dépendances.
Paulo Morgado

Réponses:

200

Dans le Web.config racine, assurez-vous que assemblyBinding contient la version appropriée pour l'assembly «System.Web.WebPages.Razor» et «System.Web.Mvc». Vérifiez leur existence réelle ainsi que ma balise d'assembly "System.Web.WebPages.Razor" manquait à l'origine de l'erreur. J'avais mes versions d'assembly définies respectivement sur 3.0 et 5.0 au moment de la rédaction de cet article avec les mises à jour complètes de NuGet. Le code devrait ressembler à quelque chose comme ci-dessous. Le publicKeyToken restera le même entre les versions. À votre santé!

<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>
Ian Flynn
la source
2
A travaillé pour moi. Il me manquait des informations sur Razor et MVC a indiqué la mauvaise version.
Hoakie
Même situation que @Hoakie - mise à jour de Razor vers 3.0.0 et MVC vers 5.0.0 et il n'y avait pas de référence Razor dependAssembly, et MVC disait toujours oldVersion = "1.0.0.0-4.0.0.0" newVersion = "4.0.0.0". Ajout du code XML de l'assembly dépendant de Razor ci-dessus et modification de 4.0.0.0 en 5.0.0.0 et de l'oncle de Bob.
Scott Baker
2
Cela a fonctionné pour moi merci. J'avais "System.Web.WebPages" avec les liaisons correctes mais cela ne fonctionnait pas jusqu'à ce que j'aie également ajouté la clé Razor. Cependant, dans d'autres projets, je n'ai pas eu à faire cela, je ne suis pas sûr de la différence et de la raison pour laquelle les liaisons de super-classe ne seraient pas gérées pour Razor. Quelqu'un connaît-il la réponse?
Shane
Pareil ici. J'ai l'entrée MVC mais pas celle de Razor. Cela fonctionne maintenant. Je vous remercie.
Yves Tkaczyk
Cela fonctionne stackoverflow.com/questions/17454852/…
Rodolpho Brock
40

Mon cas passait de mvc4 à mvc5.

Je me suis assuré que mes références étaient synchronisées (avec une application mvc5 nouvellement créée), mis à jour le fichier web.config en conséquence et cela ne fonctionnait toujours pas. Cela a finalement fonctionné lorsque j'ai changé mon fichier web.config (répertoire INSIDE THE VIEWS ) de:

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

Pour ça:

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

RAPPELEZ-VOUS: arrêtez iis (express ou natif), nettoyez la solution, construisez et exécutez.

user3141889
la source
Je pense que cette réponse devrait être une réponse en fait. La liaison d'assembly est généralement correcte lors de l'utilisation de l'approche du package de mise à jour pour la mise à niveau de mvc4 vers mvc5.
Roman
34

Juste au cas où la réponse d'ian ne serait pas suffisante (et les assemblages corrects, mais le casting est toujours faux) il y a de fortes chances que vous n'ayez pas encore mis à jour le <configSections>pour refléter le nouvel assemblage. assurez-vous que la partie d'assemblage fait également référence à la version 3.0 de la System.Web.WebPages.Razorbibliothèque. par exemple

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

(Notez qu'ils font tous référence version=3.0.0maintenant)

Brad Christie
la source
8
J'ajouterais simplement que si vous ne trouvez pas ces paramètres dans la racine Web.Config, vérifiez également Web.Config dans le dossier Views.
gligoran
4
Oui, le problème était le dossier Vues web.config pour moi.
Matthew Nichols
15

La solution d'Ian a fonctionné dans un projet, mais pour d'autres, j'ai besoin d'informations plus complètes dans Comment mettre à niveau vers MVC 5 et Web API 2

Ken Mc
la source
Cet article l'a fait pour moi. Merci!
gligoran
Je pense que cet article contient la description de mise à niveau la plus correcte et la plus complète, merci.
Mikhail Brinchuk
1

Ce problème est très courant lorsque vous développez pour MVC 4, puis que vous installez soudainement un package qui est disponible dans une version plus récente afin de casser toute l'application.

La seule solution à ce problème consiste à mettre à niveau l'ensemble de votre application vers une version plus récente ou à installer l'ancien package compatible avec votre application.

ProgrammationNinja
la source
1

Problème:

[A] System.Web.WebPages.Razor.Configuration.HostSection ne peut pas être converti en [B] System.Web.WebPages.Razor.Configuration.HostSection. Le type A provient de 'System.Web.WebPages.Razor, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' dans le contexte 'Default' à l'emplacement 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '. Le type B provient de 'System.Web.WebPages.Razor, Version = 3.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' dans le contexte 'Default' à l'emplacement 'C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Fichiers ASP.NET temporaires \ rbs.ceds.todomvcdemo \ 73d0b7c7 \ 46e3986d \ assembly \ dl3 \ 21020800 \ 101279fc_da94cf01 \ System.Web.WebPages.Razor.dll '.

Identification:

L'erreur vient du fichier de configuration ie web.config de votre projet.

Ici, vous trouverez que la version de Razor est définie sur 2.0.0.0 alors que, comme dans votre projet, la version 2.0.0.0 n'est pas disponible.

Solution:

C'est simple, il suffit de changer la version de 2.0.0.0 à 3.0.0.0 et cela fera la magie.

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

Vous n'avez pas besoin de mettre la redirection ou autre, car cela compliquera les choses.

basé sur le code
la source
0

J'ai trouvé un problème et une solution.

1 Je cible mon code sur 4.0, puis je télécharge le code et cela fonctionne. Avant cela, je mets également à jour mon code vers asp.net MVC 4.

maintenant ça marche :)

user2632851
la source
3
Pourriez-vous être plus précis?
nwayve
0

Ouvrez l'emplacement des deux fichiers dll dans votre système, copiez l'une des dll de votre emplacement de fichier dans l'autre
et essayez d'exécuter le projet.

user4287068
la source
0

Une autre façon de résoudre ce problème, sans avoir à mettre à jour les références, est la suivante

  <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>
Fernando Gonzalez Sanchez
la source