web-dev-qa-db-fra.com

Impossible de charger le fichier ou l'assembly 'System.Web.Mvc'. Comment utiliser la référence correcte?

J'ai une application basée sur les formulaires Web ASP.NET qui prend également en charge MVC 5. J'ai inclus les contrôleurs API MVC 5 dans mon projet pour lesquels je devais mettre à niveau Json de la version 4.5 à la version 7.0. Après avoir effectué ces modifications lorsque j'ai lancé l'application, le message d'erreur suivant s'affiche:

Impossible de charger le fichier ou l'assembly 'System.Web.Mvc' ou l'un de ses dépendances. La définition du manifeste de l’Assemblée localisée n’est pas correspondre à la référence de l'Assemblée. (Exception de HRESULT: 0x80131040)

J'ai vérifié la référence pour System.Web.Mvc. Dans la boîte de dialogue de propriété, la version d'exécution est v4.0.30319 et la version est 5.0.0.0. Dans web.config, les assemblys sont définis comme suit:

<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="NLog" publicKeyToken="5120e14c03d0593c" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.0.1.0" newVersion="2.0.1.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="AntiXssLibrary" publicKeyToken="d127efab8a9c114f" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages" 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.2.3.0" newVersion="5.2.3.0" />
  </dependentAssembly>
  <!--<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
  </dependentAssembly>-->
  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
    <bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
  </dependentAssembly>
</assemblyBinding>

Le journal complet des erreurs est présenté ci-dessous:

=== Informations d'état préalables à la liaison === LOG: DisplayName = System.Web.Mvc (partiel) WRN: Des informations de liaison partielle ont été fournies pour un Assembly: WRN: Nom de l'assembly: System.Web.Mvc | Identifiant de domaine: 2 WRN: A Une liaison partielle se produit lorsqu'une partie seulement du nom d'affichage de l'assembly est à condition de. WRN: le classeur pourrait charger un fichier .__ incorrect. Assemblée. WRN: Il est recommandé de fournir un texte entièrement spécifié identité pour l'Assemblée, WRN: cela se compose du nom simple, Version, culture et jeton de clé publique. WRN: Voir le livre blanc http://go.Microsoft.com/fwlink/?LinkId=109270 pour plus d'informations et solutions communes à ce problème. LOG: Appbase = fichier: /// C:/Utilisateurs/Ahmed/Documents/Visual Studio 2013/Projets/MediaSoft/Projet/c #/YuClone/YuClone/LOG: valeur initiale PrivatePath = C:\Utilisateurs\Ahmed\Documents\Visual Studio 2013\Projects\MediaSoft\Project\c #\YuClone\YuClone\bin Appelant Assemblée: (Inconnu) . === LOG: Cette liaison commence dans le contexte de chargement par défaut. LOG: Utilisation du fichier de configuration de l'application: C:\Utilisateurs\Ahmed\Documents\Visual Studio 2013\Projets\MediaSoft\Projet\c #\YuClone\YuClone\web.config JOURNAL: Utilisation du fichier de configuration de l’hôte: C:\Utilisateurs\Ahmed\Documents\IISExpress\config\aspnet.config JOURNAL: Utilisation de Fichier de configuration de la machine à partir de C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config . LOG: La stratégie n'est pas appliquée à la référence pour le moment (liaison Assembly privée, Personnalisée, partielle ou localisée). LOG: Tentative téléchargement de la nouvelle URL fichier: /// C:/Utilisateurs/Ahmed/AppData/Local/Temp/Temporaire ASP.NET Fichiers/root/22a49c5f/2f5ffeb9/System.Web.Mvc.DLL. LOG: Tentative téléchargement de la nouvelle URL fichier: /// C:/Utilisateurs/Ahmed/AppData/Local/Temp/Temporaire ASP.NET Fichiers/racine/22a49c5f/2f5ffeb9/System.Web.Mvc/System.Web.Mvc.DLL. BÛCHE: Tentative de téléchargement du nouveau fichier URL: /// C: /Users/Ahmed/Documents/Visual Studio 2013/Projets/MediaSoft/Projet/c #/YuClone/YuClone/bin/System.Web.Mvc.DLL . LOG: Utilisation du fichier de configuration de l'application: C:\Utilisateurs\Ahmed\Documents\Visual Studio 2013\Projets\MediaSoft\Projet\c #\YuClone\YuClone\web.config JOURNAL: Utilisation du fichier de configuration de l’hôte: C:\Utilisateurs\Ahmed\Documents\IISExpress\config\aspnet.config JOURNAL: Utilisation de Fichier de configuration de la machine à partir de C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config . LOG: Redirect trouvé dans le fichier de configuration de l'application: 5.0.0.0 redirigé vers 5.2.3.0. LOG: Référence post-stratégie: System.Web.Mvc, Version = 5.2.3.0, Culture = neutre, PublicKeyToken = 31bf3856ad364e35 LOG: Tentative de téléchargement d’une nouvelle URL fichier: /// C:/Utilisateurs/Ahmed/AppData/Local/Temp/Temporaire ASP.NET Fichiers/root/22a49c5f/2f5ffeb9/System.Web.Mvc.DLL. LOG: Tentative téléchargement de la nouvelle URL fichier: /// C:/Utilisateurs/Ahmed/AppData/Local/Temp/Temporaire ASP.NET Fichiers/racine/22a49c5f/2f5ffeb9/System.Web.Mvc/System.Web.Mvc.DLL. BÛCHE: Tentative de téléchargement du nouveau fichier URL: /// C: /Users/Ahmed/Documents/Visual Studio 2013/Projets/MediaSoft/Projet/c #/YuClone/YuClone/bin/System.Web.Mvc.DLL . WRN: la comparaison du nom de l'assembly a entraîné le décalage: Minor Version ERR: Impossible de terminer la configuration de l’assemblage (hr = 0x80131040) . Sondage terminé.

Voici le Stack Trace

[FileLoadException: impossible de charger le fichier ou l'assembly 'System.Web.Mvc' ou une de ses dépendances. Définition du manifeste de l'Assemblée localisée ne correspond pas à la référence de l'Assemblée. (Exception de HRESULT: 0x80131040)]

[FileLoadException: impossible de charger le fichier ou l'assembly 'System.Web.Mvc, Version = 5.2.3.0, Culture = neutre, PublicKeyToken = 31bf3856ad364e35 'ou une de ses dépendances. Définition du manifeste de l'Assemblée localisée ne correspond pas à la référence de l'Assemblée. (Exception de HRESULT: 0x80131040)] System.Reflection.RuntimeAssembly._noad (AssemblyName FileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly LocationHint, StackCrawlMark & ​​stackMark, IntPtrBostBlack, forIntrospection, Boolean suppressSecurityChecks) +0











Comment mettre à niveau la version de System.Web.Mvc pour qu'il pointe vers le bon assemblage?

How do I upgrade the version of System.Web.Mvc to point to the correct assembly?

15
Ahmed Mujtaba

Une erreur est due à une liaison incorrecte. J'ai changé: 

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
  </dependentAssembly>

à

  <dependentAssembly>
<assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.0.0.0" />

et cela fonctionne maintenant.

12
Ahmed Mujtaba

Dans mon cas, j'ai résolu le problème en modifiant les éléments PageControls et assemblyBinding de config pour qu'ils correspondent à la version actuelle de `System.Web.Mvc, qui est 5.2.4.0.

PageControls

Dans la section PageControls, remplacez la version dans toutes les occurrences de Assembly "System.Web.Mvc", pour votre version actuelle .:

 <pages controlRenderingCompatibilityVersion="4.0" validateRequest="false" pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  <controls>
    <add Assembly="System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc"/>
  </controls>

assemblyBinding

Dans assemblyBindingelement, associez toutes les versions précédentes de Assembly à la version actuelle, comme ceci:

 <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="0.0.0.0-5.2.4.0" newVersion="5.2.4.0"/>
  </dependentAssembly>

Cet élément est utilisé par n'importe quel package, les références à une ancienne version. 

Comment vérifier la version actuelle de 'System.Web.Mvc'

Vous pouvez voir la version actuelle de System.Web.Mvc dans l’onglet Propriétés, en sélectionnant l’assemblage à partir des références du projet, comme ceci:

 enter image description here

Remarque: je réponds à une question vieille de 2 ans. Les raisons de cette erreur peuvent maintenant être différentes.

3
ByteArtisan

Dans mon cas, l'application fonctionnait correctement localement mais pas sur l'un des serveurs. Le retrait de la section 'System.Web.Mvc' a résolu le problème pour moi.

0
Vishal