web-dev-qa-db-fra.com

Impossible de charger le fichier ou l'assembly 'System.Web.Mvc, Version = 3.0.0.0, problème Elmah.MVC

Localement: mon application MVC 4, asp.net, c # fonctionne correctement sous IIS 8/Windows 8.

Lors du déploiement sur Windows Server 2008, j'obtiens cette erreur:

Could not load file or Assembly 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located Assembly's manifest definition does not match the Assembly reference. (Exception from HRESULT: 0x80131040)

et

[FileLoadException: Could not load file or Assembly 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located Assembly's manifest definition does not match the Assembly reference. (Exception from HRESULT: 0x80131040)]
   Elmah.Mvc.Bootstrap.Initialize() +0

[InvalidOperationException: The pre-application start initialization method Initialize on type Elmah.Mvc.Bootstrap threw an exception with the following error message: Could not load file or Assembly 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located Assembly's manifest definition does not match the Assembly reference. (Exception from HRESULT: 0x80131040).]
   System.Web.Compilation.BuildManager.InvokePreStartInitMethodsCore(ICollection`1 methods, Func`1 setHostingEnvironmentCultures) +12881963
   System.Web.Compilation.BuildManager.InvokePreStartInitMethods(ICollection`1 methods) +12881672
   System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath) +240
   System.Web.Compilation.BuildManager.ExecutePreAppStart() +152
   System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +1151

[HttpException (0x80004005): The pre-application start initialization method Initialize on type Elmah.Mvc.Bootstrap threw an exception with the following error message: Could not load file or Assembly 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located Assembly's manifest definition does not match the Assembly reference. (Exception from HRESULT: 0x80131040).]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +12881108
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +159
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +12722297

Cela se produit si je sélectionne "Seuls les fichiers nécessaires à l'exécution de cette application" dans le menu déroulant "Eléments à déployer" dans les propriétés du projet/package/publier Web.

Si je sélectionne "tous les fichiers de ce projet", cela fonctionne bien.

Je suppose qu'Elmah s'appuie sur une version plus ancienne de MVC ou quelque chose du genre. Comment puis-je résoudre ce problème sans avoir à télécharger tous les fichiers?

Quel est le meilleur moyen de résoudre des problèmes comme celui-ci?

Merci.

29
niico

J'ai eu exactement ce même problème en utilisant MVC4 avec Ninject construit pour .Net 4.5

Pour résoudre ce problème, je devais ajouter une redirection de liaison vers mon fichier Web.config: (À la fin du fichier, juste avant la balise </configuration>)

  <runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0"/>
      </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0"/>
  </dependentAssembly>
    </assemblyBinding>
  </runtime>

Cela oblige le serveur Web à utiliser System.Web.Mvc 4.0.0.0 à la place d'une ancienne version. 

58
Declan

Certaines procédures permettent de résoudre le problème. Si la redirection de liaison dans web.config ne résout pas le problème, vous pouvez procéder comme suit pour le résoudre:

1) Dans l'arborescence de Visual Studio Solution Explorer, cliquez avec le bouton droit de la souris sur Références sous votre projet Web et sélectionnez Gérer les packages NuGet.

2) Allez à l'onglet Parcourir et sélectionnez nuget.org comme source du package.

3) Recherchez et installez les packages suivants: Ninject, Ninject.Web.Common et Ninject.MVC5.

Il est également préférable de mettre à jour les packages, en particulier Microsoft ASP.NET MVC dans l'onglet Mises à jour de Gérer les packages NuGet.

J'espère que cela t'aides...

0
Murat Yıldız