web-dev-qa-db-fra.com

Impossible de charger le fichier ou l'assembly System.Web.Http.WebHost après publication sur le site Web Azure

J'ai créé un projet Web et il fonctionne bien dans Visual studio. Cependant, j'ai eu l'erreur suivante après l'avoir publiée sur azurewebsites. Qu'est-ce qui peut causer le problème?

Impossible de charger le fichier ou l'assembly 'System.Web.Http.WebHost, Version = 5.0.0.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)

Description: une exception non gérée s'est produite lors de l'exécution de la demande Web en cours. Veuillez vérifier la trace de la pile pour plus d'informations informations sur l'erreur et son origine dans le code. 

Détails des exceptions: System.IO.FileLoadException: Impossible de charger le fichier ou Assembly 'System.Web.Http.WebHost, Version = 5.0.0.0, Culture = neutre, PublicKeyToken = 31bf3856ad364e35 'ou l'une de ses dépendances. Le La définition du manifeste de l'Assemblée localisée ne correspond pas à celle de l'Assemblée référence. (Exception de HRESULT: 0x80131040)

Erreur de source: 

Une exception non gérée a été générée lors de l'exécution du fichier demande web en cours. Informations concernant l'origine et l'emplacement de l'exception peut être identifiée à l'aide de la trace de pile d'exceptions ci-dessous.

Suivi de la charge d'assemblage: Les informations suivantes peuvent être utiles à déterminer pourquoi l'assembly 'System.Web.Http.WebHost, Version = 5.0.0.0, Culture = neutre, PublicKeyToken = 31bf3856ad364e35 'n'a pas pu être chargé.

WRN: la journalisation de la liaison d'assemblage est désactivée. Pour activer Assembly bind échec de la journalisation, définissez la valeur de registre [HKLM\Software\Microsoft\Fusion! EnableLog] (DWORD) sur 1. Remarque: Là Une pénalité de performance est associée à un échec de liaison d’assemblage. enregistrement. Pour désactiver cette fonctionnalité, supprimez la valeur de registre [HKLM\Software\Microsoft\Fusion! EnableLog].

Ce qui suit fait partie du fichier web.config. 

  <system.web>
    <customErrors mode="Off"/>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" />
    </authentication>
    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
  <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers></system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
      </dependentAssembly>
      <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="WebGrease" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
133
ca9163d9

La dll est manquante dans l'environnement publié (déployé). C’est la raison pour laquelle cela fonctionne dans Visual Studio, mais pas dans l’environnement Web Azure.

Il suffit de faire Copy Local = true dans les propriétés de l’Assembly ( System.Web.Http.WebHost ), puis de redéployer, cela devrait fonctionner correctement. 

Si vous obtenez la même erreur, c’est-à-dire qu’il manque un autre assemblage, définissez-le en copylocal = true et redéployez-le, répétez-le de manière itérative, si vous n'êtes pas sûr de ses dépendances.

128
Naveen Vijay

Si vous êtes toujours à la recherche d'une réponse, essayez de vérifier cette discussion question . Cela m'a aidé à résoudre un problème similaire.

edit: La solution qui m'a aidé était d'exécuter Update-Package Microsoft.AspNet.WebApi -reinstall à partir du gestionnaire de paquets NugGet, comme suggéré par Pathoschild . J'ai ensuite dû supprimer mon fichier .suo et redémarrer VS, comme suggéré par Sergey Osypchuk dans this fil .

84
amraby

J'ai rencontré le même problème et je l'ai résolu en définissant CopyLocal sur true pour les bibliothèques suivantes:

System.Web.Http.dll
System.Web.Http.WebHost.dll
System.Net.Http.Formatting.dll

Je dois ajouter que j'utilise MVC4 et NET 4

53
Bronek

Pour moi a travaillé en ajoutant la section suivante au fichier web.config:

<configuration>
...
    <runtime>
    ...
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Http.WebHost" publicKeyToken="31bf3856ad364e35" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
        </dependentAssembly>
    ...
    </runtime>
...
</configuration>

Cet exemple représente MVC 5.1. J'espère que cela aidera quelqu'un à résoudre ce problème.

33
Eadel

Pour moi, cela a commencé à fonctionner après avoir sélectionné "Supprimer les fichiers supplémentaires à la destination" dans Options de publication de fichier sous les paramètres de la boîte de dialogue de publication.

13
Magnus Ahlin

La DLL est manquante dans le publié (environnement déployé). C’est la raison pour laquelle cela fonctionne dans Visual Studio, mais pas dans l’environnement Web Azure.

Copiez simplement Local = true dans les propriétés de l’Assembly (System.Web.Http.WebHost), puis effectuez un redéploiement.

10
venkat

J'utilise vs2012 et je pense que la mise à jour KB2781514 a modifié certains paramètres. Tous mes System.Web.Http dans mon projet MVC4 sont passés à false et je garde ce message J'avais changé le All file in this project dans la propriété de publication mais cela ne fonctionnait pas. Enfin, je dois changer Copy Local = true un par un et résoudre ce problème.

6
thanh

J'ai eu la même erreur et j'ai changé ma version de 4 à 3 et elle est résolue:

<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
    <!-- Ensure correct version of MVC -->
    <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
    </dependentAssembly>
</assemblyBinding>
2
Ilaria

J'ai eu le même problème dans mon application.

System.web.http.webhost not found.

Il vous suffit de copier le fichier system.web.http.webhost à partir de votre projet principal que vous exécutez dans Visual Studio et de le coller dans le répertoire bin de votre projet publié. 

Après cela, la même erreur peut s'afficher, mais le nom du répertoire est modifié. Il peut s'agir de system.web.http. Suivez la même procédure que ci-dessus. Cela fonctionnera après le téléchargement de tous les fichiers. En raison du paquet de nugets dans Visual Studio, ils sont téléchargés sur Internet mais ne peuvent pas être téléchargés sur le serveur.

Vous pouvez trouver ce fichier dans le répertoire bin de votre projet.

2
imran khan

Cela m'est arrivé sur VS2013 (mise à jour 5) /ASP.NET 4.5, sous le type de projet "Application Web" qui inclut MVC et Web API 2. Une erreur s'est produite juste après la création du projet et avant l'ajout de code. L'ajout de la configuration suivante résout le problème pour moi. Après la résolution de "System.Web.Helpers", deux autres erreurs similaires ont été signalées pour "System.Web.Mvc" et "System.Web.WebPages".

<runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.3.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
1
Masoud Safi

Si votre solution contient plusieurs projets et que la création d’un de vos projets échoue en raison de cette erreur, assurez-vous d’avoir installé le package de nugets WebApi Core dans ce projet. Ajouter simplement une référence à System.Web.Http n'aide pas, vous devez installer le package de nuget approprié dans ce projet.

Ma solution comportait plusieurs projets et WebApi Core était déjà installé dans un autre projet. J'ai référencé l'assembly System.Web.Http en cliquant avec le bouton droit de la souris et en cochant l'assembly dans la liste. Cela n'a pas fonctionné sous Azure, bien que localement, cela fonctionne correctement. J'ai dû supprimer la référence manuelle et ajouter le package de nuget WebApi Core à chaque projet nécessitant la référence Assembly.

0
Ali

Assurez-vous que la version du package est la même pour toute la solution. Je viens de déclasser et de mettre à niveau le paquet Microsoft.AspNet.Mvc à travers la solution et le problème résolu.

0
Masoud Darvishian

J'ai supprimé l'entrée suivante de web.config et cela a fonctionné pour moi.

<dependentAssembly>
                <assemblyIdentity name="System.Web.Http.WebHost" culture="neutral" publicKeyToken="31BF3856AD364E35" />
                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="5.2.6.0" />
            </dependentAssembly>
0
Ibrahim Mohammed

Dans le cas où "Copy Local" est déjà True, je trouve parfois que cela fonctionne si vous supprimez les fichiers sur lesquels il a été publié et que vous les publiez à nouveau.

Par exemple, si vous utilisez IIS, supprimez les sites Web et le contenu du répertoire dans lequel ils sont publiés, puis publiez à nouveau.

Il se peut que des versions plus anciennes des fichiers se trouvent sur la destination. Par conséquent, pour vous assurer de ne pas utiliser d'anciennes versions, supprimez tout avant de publier à nouveau.

0
Prasanth Louis

Il me manquait plusieurs DLL. Même si je les copiais manuellement dans le répertoire lors de ma prochaine publication, ils disparaîtraient. Chacun d'eux était déjà configuré pour copier localement dans VS .Le correctif pour moi était de définir chacun sur Copier localement faux, enregistrer, construire puis de définir chacun pour copier localement vrai. Cette fois lorsque j'ai publié toutes les DLL publiées correctement. Étrange

0
Grayson