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.


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>

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


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.


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)


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


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.


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.


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


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.


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>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.