Ne pouvait pas charger le système de fichiers ou d'assemblage.Web.Http.WebHost après sa publication sur le site D'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. Ce qui peut poser problème?

ne pouvait pas charger le système de fichiers ou d'assemblage.Web.Http.hébergeur, Version=5.0.0.0, Culture= neutre, PublicKeyToken= 31bf3856ad364e35 " or l'une de ses dépendances. L'assemblée manifeste définition ne correspond pas à la référence d'assemblage. (Exception de HRESULT: 0x80131040)

Description: la demande web actuelle. S'il Vous Plaît, passez en revue la trace de la pile pour plus information sur l'erreur et son origine dans le code.

Détails De L'Exception: Système.IO.FileLoadException: impossible de charger le fichier ou assemblage du Système.Web.Http.WebHost, Version=5.0.0.0, Culture = neutre, PublicKeyToken=31bf3856ad364e35' ou l'une de ses dépendances. Le de l'Assemblée localisée définition du manifeste ne correspond pas à l'assemblée référence. (Exception de HRESULT: 0x80131040)

Source D'Erreur:

une exception non freinée a été générée lors de l'exécution de la demande web actuelle. Informations concernant l'origine et l'emplacement de l'exception peut être identifiée en utilisant la trace de la pile d'exceptions ci-dessous.

trace de la charge D'assemblage: les informations suivantes peuvent être utiles pour déterminer pourquoi l'assemblée " du Système.Web.Http.WebHost, Version=5.0.0.0, Culture=neutre, PublicKeyToken = 31bf3856ad364e35 " Impossible à charger.

WRN: la journalisation de la reliure D'assemblage est désactivée. Pour activer l'assemblage bind journalisation des pannes, définir la valeur du registre [HKLMSoftwareMicrosoftFusion!EnableLog] (DWORD) à 1. Remarque: Il N' y a-t-il une pénalité de performance associée à la défaillance de la liaison d'assemblage? journalisation. Pour désactiver cette fonctionnalité, supprimez la valeur du registre [HKLMSoftwareMicrosoftFusion!EnableLog].

ce qui suit fait partie du web.fichier de configuration.

  <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.NETFrameworkv4.0.30319aspnet_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.NETFramework64v4.0.30319aspnet_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
demandé sur ca9163d9 2013-12-02 11:40:01

13 réponses

Le dll est manquant dans la publication (environnement déployé). C'est la raison pour laquelle il fonctionne dans le local i.e. Visual Studio mais pas dans L'environnement du Site Azure.

Just do Copy Local = true dans les propriétés pour le système d'assemblage ( système.Web.Http.WebHost ) et puis faire un redéploiement, il devrait fonctionner très bien.

si vous avez la même erreur, c'est-à-dire qu'il manque un autre assemblage, alors faites cet assemblage à copylocal=true et redéployez, répétez itérativement - si vous n'êtes pas sûr de ses dépendances.

128
répondu Naveen Vijay 2013-12-02 07:49:52

si vous cherchez toujours une réponse, essayez de cocher cette fil de questions . Il m'a aidé à résoudre un problème similaire.

modifier: 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 .suo file et redémarrer VS, comme suggéré par Sergey Osypchuk dans ce thread .

83
répondu amraby 2017-05-23 12:26:25

j'ai rencontré le même problème et je l'ai résolu en mettant CopyLocal à true pour les libs suivants:

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

je dois ajouter que j'utilise MVC4 et NET 4

52
répondu Bronek 2017-04-20 09:11:02

pour moi travaillé en ajoutant la section suivante à web.config fichier:

<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. Espérons que cela aidera quelqu'un à résoudre ce problème.

33
répondu Eadel 2014-04-04 14:29:03

pour moi, il a commencé à travailler après avoir sélectionné" Supprimer des fichiers supplémentaires à destination " dans le fichier publier les options sous Paramètres sur la boîte de dialogue Publier.

11
répondu Magnus Ahlin 2014-12-06 00:23:49

La dll est manquant dans la publication (environnement déployé). C'est la raison pour laquelle il fonctionne dans le local i.e. Visual Studio mais pas dans L'environnement du Site Azure.

il suffit de copier Local = true dans les propriétés pour l'assemblage(Système.Web.Http.Hébergeur) et puis faire un redéployer, il devrait fonctionner correctement.

10
répondu venkat 2014-10-27 09:15:08

j'utilise vs2012 et je pense que la mise à jour KB2781514 a changé certains paramètres. Tout mon système.Web.Http dans mon projet MVC4 changé en false et je garde reçu ce message. J'avais changé le All file in this project dans la propriété d'édition mais il ne fonctionne pas. Finalement je dois changer Copy Local = true un par un et j'ai résolu ce problème.

6
répondu thanh 2014-10-24 04:04:30

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

<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
répondu Ilaria 2017-04-20 08:53:46

j'ai eu le même problème dans ma demande.

System.web.http.webhost not found.

vous avez juste besoin 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 votre projet publié bin répertoire.

après cela il peut afficher la même erreur mais le nom du répertoire est changé il peut être system.web.http . Suivez la même procédure que ci-dessus. Il fonctionnera après tous les fichiers sont téléchargés. Ceci dû au paquet nuget dans Visual Studio ils téléchargent à partir de l'internet, mais sur le serveur il ne peut pas le télécharger.

vous pouvez trouver ce fichier dans l'Annuaire de votre projet bin .

2
répondu imran khan 2017-04-20 11:38:27

cela m'est arrivé sur VS2013(Maj 5)/ASP.NET 4.5, sous le type de projet "Application Web" qui comprend MVC et API Web 2. L'erreur s'est produite juste après avoir créé le projet et avant d'ajouter n'importe quel code. Ajouter la configuration suivante, aidez-moi. Après avoir résolu Le système.Web.Problème deux autres erreurs similaires sont apparues pour le système.Web.Mvc " et " système.Web.page."

<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
répondu Masoud Safi 2016-10-01 18:20:43

il me manquait plusieurs DLLs. Même si je les copiais manuellement dans le répertoire La prochaine fois que je les publiais, ils disparaîtraient. Chacun d'eux était déjà configuré pour être copié localement dans VS. Le correctif pour moi était de configurer chacun pour copier localement false, save, build puis set chacun pour copier localement true. Cette fois, quand j'ai publié tous les DLLs publiés correctement. Étrange

0
répondu Grayson 2015-05-14 14:43:34

si vous avez plusieurs projets dans votre solution et qu'un de vos projets ne réussit pas à construire à cause de cette erreur, assurez-vous que vous avez installé le paquet nuget du noyau WebApi dans ce projet. Il suffit d'ajouter une référence au système.Web.Http n'aide pas, vous devez installer le paquet nuget correct dans ce projet.

j'avais plusieurs projets dans ma solution et WebApi Core était déjà installé dans un autre projet. J'ai référencé le Système.Web.Assemblée Http par en cliquant avec le bouton droit de la souris et en cochant l'ensemble de la liste, il n'a pas fonctionné sur Azure, bien que localement il se construise correctement. J'ai dû supprimer la référence manuelle et ajouter le paquet WebAPI Core nuget à chaque projet qui avait besoin de la référence d'assemblage.

0
répondu Ali 2016-03-21 10:49:37

dans le cas où" copie locale " est déjà vrai, je trouve qu'il fonctionne parfois si vous supprimez les fichiers où il a été publié et publier à nouveau.

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

il peut y avoir des versions plus anciennes de fichiers à destination, donc pour vous assurer que vous n'utilisez pas des versions plus anciennes, supprimez tout avant de publier encore.

0
répondu Prasanth Louis 2016-09-28 13:34:13