asp.net - por - visual studio create azure web app




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

Cela m'est arrivé sur VS2013 (Update 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 d'ajouter du code. L'ajout de la configuration suivante le corrige pour moi. Après avoir résolu le problème "System.Web.Helpers", deux autres erreurs similaires sont apparues 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>

J'ai créé un projet web et ça fonctionne bien dans Visual Studio. Cependant, j'ai reçu 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 l'une de ses dépendances. La définition de manifeste de l'assembly localisé ne correspond pas à la référence d'assembly. (Exception de HRESULT: 0x80131040)

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

Détails d'exception: System.IO.FileLoadException: Impossible de charger le fichier ou l'assembly 'System.Web.Http.WebHost, Version = 5.0.0.0, Culture = Neutre, PublicKeyToken = 31bf3856ad364e35' ou l'une de ses dépendances. La définition de manifeste de l'assembly localisé ne correspond pas à la référence d'assembly. (Exception de HRESULT: 0x80131040)

Erreur de source:

Une exception non gérée a été générée lors de l'exécution de la requête Web en cours. Les informations concernant l'origine et l'emplacement de l'exception peuvent être identifiées à l'aide de la trace de la pile d'exceptions ci-dessous.

Assembly Load Trace: Les informations suivantes peuvent être utiles pour 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 consignation de liaison d'assembly est désactivée. Pour activer la journalisation des échecs de liaison d'assembly, définissez la valeur de registre [HKLM \ Software \ Microsoft \ Fusion! EnableLog] (DWORD) sur 1. Remarque: Certaines pénalités de performance sont associées à la journalisation des échecs de liaison d'assembly. 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>

Dans le cas où "Copy Local" est déjà True, je trouve parfois qu'il fonctionne si vous supprimez les fichiers sur lesquels il a été publié et 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 peut y avoir des versions plus anciennes de fichiers à la destination, donc pour vous assurer que vous n'utilisez pas d'anciennes versions, supprimez tout avant de publier à nouveau.


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>

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 de votre projet principal que vous exécutez dans Visual Studio et de le coller dans le répertoire bin votre projet publié.

Après cela, il peut montrer 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. Cela fonctionnera après que tous les fichiers ont été téléchargés. Cela en raison du paquet de nuget dans Visual Studio ils téléchargent à partir d'Internet mais sur le serveur il ne peut pas le télécharger.

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


J'utilise vs2012 et je pense que la mise à jour KB2781514 a changé certains paramètres. Tout mon System.Web.Http dans mon projet MVC4 a changé en faux et j'ai gardé 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ésolu ce problème.


La dll est manquante dans l'environnement publié (déployé). C'est la raison pour laquelle il fonctionne dans le Visual Studio local, mais pas dans l'environnement Azure Website.

Copy Local = true simplement Copy Local = true dans les propriétés de l'assembly ( System.Web.Http.WebHost ), puis effectuez un redéploiement, cela devrait fonctionner correctement.

Si vous obtenez l'erreur similaire, c.-à-d. Un autre assemblage manquant, alors faites cet assemblage à copylocal = true et redéployez, répétez ceci itérativement - si vous n'êtes pas sûr de ses dépendances.


Pour moi 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.


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


Si vous avez plusieurs projets dans votre solution et que l'un de vos projets échoue à cause de cette erreur, vérifiez que vous avez installé le package WebApi Core nuget dans ce projet. Ajouter simplement une référence à System.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é l'assembly System.Web.Http en cliquant avec le bouton droit de la souris et en cochant l'assembly dans la liste, mais cela ne fonctionnait pas sur Azure, bien que localement, il se construise correctement. J'ai dû supprimer la référence manuelle et ajouter le package WebApi Core nuget à chaque projet nécessitant la référence d'assembly.







azure-web-sites