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?
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.
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 assemblyBinding
element, 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:
Remarque: je réponds à une question vieille de 2 ans. Les raisons de cette erreur peuvent maintenant être différentes.
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.