GlobalConfiguration.Configure () non présent après la migration de l'API Web 2 et de .NET 4.5.1

148

J'ai récemment commencé à suivre ce guide pour migrer mon projet vers .NET 4.5.1 et Web Api 2.

La toute première chose que le développeur MS Rick Anderson vous demande de faire est de changer:

WebApiConfig.Register(GlobalConfiguration.Configuration);

à

GlobalConfiguration.Configure(WebApiConfig.Register);

dans le fichier global.asax. Pourtant, cela me donne une erreur lorsque j'essaye de construire:

Erreur 1 «System.Web.Http.GlobalConfiguration» ne contient pas de définition pour «Configurer»

Mon projet est actuellement sur MVC 5 et Web Api 2 et .NET 4.5.1, mais je pense que System.Web.Http pense toujours que c'est la version .NEt 4.0.

Comment puis-je résoudre ce problème?

Je vous remercie.

Éditer:

Voici mes liaisons d'assemblage:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31BF3856AD364E35" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.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.Mvc" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.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.Http" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
  </dependentAssembly> -->
</assemblyBinding>

Tout a été commenté après le commentaire du haut parce que j'obtenais l'erreur:

Avertissement 2 Conflits détectés entre différentes versions du même assembly dépendant qui n'ont pas pu être résolus. Ces conflits de référence sont répertoriés dans le journal de génération lorsque la verbosité du journal est définie sur détaillée.

et se débarrasser des fixations rigides réglait cela.

Nzondlo
la source
1
Avez-vous d' Microsoft.AspNet.Web.Helpers.Mvcabord désinstallé ?
Blaise
regardez ma réponse stackoverflow.com/a/20653546/3114457 cela devrait résoudre vos problèmes de migration
Livius
5
Veuillez marquer stackoverflow.com/a/21514748/2343 comme bonne réponse!
Sameer Alibhai

Réponses:

271

Il a besoin du system.web.http.webhost qui fait partie de ce package. J'ai corrigé cela en installant le package suivant:

PM> Install-Package Microsoft.AspNet.WebApi.WebHost 

ou recherchez-le dans nuget https://www.nuget.org/packages/Microsoft.AspNet.WebApi.WebHost/5.1.0

Tyrone Moodley
la source
A été ajouté automatiquement lorsque j'ai ajouté un contrôleur API. J'ai dû redémarrer VS2015 pour le faire fonctionner. J'ai également fait tout le reste recommandé sur cette page, donc je ne sais pas quel était le problème réel.
Piotr Kula
6
Cela n'a pas fonctionné pour moi. Le package est déjà installé dans mon projet.
Shimmy Weitzhandler
Intéressant était que l'hébergeur était déjà installé et ne fonctionnait toujours pas, puis je change l'ordre dans lequel le a GlobalConfiguration.Configure(WebApiConfig.Register);été inséré dans le global.asax en haut juste après le AreaRegistration, et cela a très bien fonctionné.
PedroSouki
pourquoi ils n'ont pas écrit quelque chose comme ça? il me faut une demi-heure pour trouver votre réponse
Homayoun Behzadian
A travaillé pour moi après la mise Microsoft.AspNet.WebApi.WebHostà jour vers la dernière version
Peter van Kekem
86

Aucune de ces idées n'a aidé mon projet en utilisant MVC 5.2.2.

  • System.web.Http 5.2.2 était déjà installé
  • La suppression du dossier Packages et le re-téléchargement complet de toutes les bibliothèques NuGet n'ont rien fait
  • Web.config avait déjà une entrée dependAssembly pour System.Web.Http

Forcer une réinstallation a corrigé le problème. À partir de la console du gestionnaire de packages NuGet:

update-Package -reinstall Microsoft.AspNet.WebApi.WebHost

Charles Burns
la source
1
J'ai eu le même problème mais la réinstallation ne l'a pas résolu, au moins ça ressemblait à ça et me rendait fou, j'ai dû redémarrer VS2015 et tout s'est réglé.
Piotr Kula
On dirait que la combinaison de redémarrage vs 2013 + réinstaller a résolu le problème pour moi
Ram
43

GlobalConfigurationclass fait partie du Microsoft.AspNet.WebApi.WebHostpackage nuget ... Avez-vous mis à niveau ce package vers Web API 2?

Kiran Challa
la source
1
Oui. C'est la version 5.0.0
nzondlo
1
avez-vous des redirections de liaison d'assembly dans votre web.config? si oui, pourriez-vous les partager ... Je cherche spécifiquement s'il y a des assemblages liés à System.Web.Http * ..
Kiran Challa
Je viens de publier toutes mes liaisons d'assemblage.
nzondlo
30

En plus d'utiliser la console du gestionnaire de packages pour obtenir nuget de mettre à jour le projet avec Install-Package Microsoft.AspNet.WebApi.WebHost pour l'absence de GlobalConfiguration ,

J'avais besoin de Install-Package Microsoft.AspNet.WebApi.SelfHost pour avoir manqué d' utiliser System.Web.Http;

Tyeth
la source
1
Pouvez-vous expliquer un peu plus?
Dieter Meemken
10

Vous voudrez peut-être vérifier que votre projet est Microsoft.AspNet.WebApi.WebHostinstallé. En fait, dans mon cas, a Microsoft.AspNet.WebApi.WebHostété installé dans un autre projet, mais pas dans le projet particulier qui en avait besoin. Dans votre packages.config, vérifiez qu'une ligne comme celle-ci est là:

<package id="Microsoft.AspNet.WebApi.WebHost" version="5.1.1" targetFramework="net45" />

Si ce n'est pas présent, vous ne l'avez pas Microsoft.AspNet.WebApi.WebHostinstallé dans votre projet. Vous pouvez effectuer l'installation à l'aide du gestionnaire de packages Nuget ou via la console du gestionnaire de packages. Pour installer à partir de la console du gestionnaire de package, exécutez cette commande:

Install-Package Microsoft.AspNet.WebApi.WebHost
Cameron Tinker
la source
5

L'API GlobalConfiguration.Configure est disponible dans "Microsoft.AspNet.WebApi.WebHost" version = "5.2.3"

et pas dans "Microsoft.AspNet.WebApi.WebHost" version = "4.0.0"

user3508883
la source
3

Si le problème persiste après la désinstallation et l'installation de Microsoft.AspNet.WebApi.WebHost, ajoutez également les éléments suivants dans web.config pour que la configuration globale fonctionne

 <dependentAssembly>
        <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.0.0" />
      </dependentAssembly>
ratneshsinghparihar
la source
C'était déjà dans mon web.config. Problème toujours (VS2015)
Piotr Kula
2

"Install-Package Microsoft.AspNet.WebApi.Core" fonctionnait très bien.

Terry Mosoma
la source
1

Mon problème était que le gestionnaire de packages nuget ne faisait pas de vraie mise à jour mais les fichiers contenaient des références à des versions plus anciennes, j'ai donc d'abord supprimé tous les packages liés à mvc installés (y compris le rasoir et l'api Web), puis les ai réinstallés et mis à jour la version de le rasoir dans views / web.config vers la version 3.0.0.

Soniku
la source
1

Aucune de ces solutions n'a fonctionné pour moi. J'avais un enchevêtrement de packages Nuget qui ne pouvaient pas être mis à jour en raison de dépendances circulaires les uns sur les autres.

J'aurais dû résoudre ce problème à l'ancienne. J'ai créé un nouveau projet MVC / web api et copié manuellement System.Web.Httpet à System.Web.Http.WebHostpartir du nouveau projet dans les dossiers Nuget de la solution existante. De là, j'ai mis à jour les références par, OMG, "navigation" et corrigé le problème.

Micah B.
la source
0

cela a résolu ce problème en ajoutant un espace de noms au fichier Global.asax.cs.

using System.Web.Http;

cela a résolu le problème.

user1661290
la source