GlobalConfiguration.Configure () no está presente después de la migración de Web API 2 y .NET 4.5.1

148

Recientemente comencé a seguir esta guía para migrar mi proyecto a .NET 4.5.1 y Web Api 2.

Lo primero que el desarrollador de MS, Rick Anderson, le pide que haga es cambiar:

WebApiConfig.Register(GlobalConfiguration.Configuration);

a

GlobalConfiguration.Configure(WebApiConfig.Register);

en el archivo global.asax. Sin embargo, esto me está dando un error cuando intento compilar:

El error 1 'System.Web.Http.GlobalConfiguration' no contiene una definición para 'Configurar'

Mi proyecto se encuentra actualmente en MVC 5 y Web Api 2 y .NET 4.5.1, pero creo que System.Web.Http todavía piensa que es la versión .NEt 4.0.

¿Cómo puedo solucionar esto?

Gracias.

Editar:

Aquí están mis enlaces de ensamblaje:

<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>

Todo se comentó después de que se comentara la parte superior porque recibía el error:

Advertencia 2 Se encontraron conflictos entre diferentes versiones del mismo ensamblado dependiente que no se pudieron resolver. Estos conflictos de referencia se enumeran en el registro de compilación cuando la verbosidad del registro se establece en detallada.

y deshacerse de las ataduras duras fue arreglar eso.

nzondlo
fuente
1
¿Has desinstalado Microsoft.AspNet.Web.Helpers.Mvcprimero?
Blaise
mira mi respuesta stackoverflow.com/a/20653546/3114457 debería solucionar tus problemas con la migración
Livius
55
¡Marque stackoverflow.com/a/21514748/2343 como respuesta correcta!
Sameer Alibhai

Respuestas:

271

Necesita el system.web.http.webhost que forma parte de este paquete. Lo arreglé instalando el siguiente paquete:

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

o búsquelo en nuget https://www.nuget.org/packages/Microsoft.AspNet.WebApi.WebHost/5.1.0

Tyrone Moodley
fuente
Se agregó automáticamente cuando agregué un controlador API. Tuve que reiniciar VS2015 para que funcione. También hice todo lo demás recomendado en esta página, así que no estoy seguro de cuál era el problema real.
Piotr Kula
66
Eso no funcionó para mí. El paquete ya está instalado en mi proyecto.
Shimmy Weitzhandler
Lo interesante fue que el webhost ya estaba instalado y todavía no funcionaba, luego GlobalConfiguration.Configure(WebApiConfig.Register);cambié el orden en el que se insertó en el global.asax a la parte superior justo después de AreaRegistration, y funcionó bien.
PedroSouki
¿Por qué no escribieron algo así? me lleva media hora encontrar tu respuesta
Homayoun Behzadian
Trabajó para mí después de actualizar Microsoft.AspNet.WebApi.WebHosta la última versión
Peter van Kekem
86

Ninguna de estas ideas ayudó a mi proyecto con MVC 5.2.2.

  • System.web.Http 5.2.2 ya estaba instalado
  • Eliminar la carpeta Paquetes y volver a descargar completamente todas las bibliotecas NuGet no hizo nada
  • Web.config ya tenía una entrada dependienteAssembly para System.Web.Http

Forzar una reinstalación corrigió el problema. Desde la consola del administrador de paquetes NuGet:

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

Charles Burns
fuente
1
Tuve el mismo problema, pero la reinstalación no lo solucionó, al menos parecía así y me estaba volviendo loco, tuve que reiniciar VS2015 y se solucionó.
Piotr Kula
Parece que la combinación de reiniciar vs2013 + reinstalar resolvió el problema para mí
Ram
43

GlobalConfigurationLa clase es parte del Microsoft.AspNet.WebApi.WebHostpaquete Nuget ... ¿Ha actualizado este paquete a Web API 2?

Kiran Challa
fuente
1
Si. Es la versión 5.0.0
nzondlo
1
¿tiene alguna redirección de enlace de ensamblaje en su web.config? en caso afirmativo, ¿podría compartirlos? Estoy buscando específicamente si hay alguno relacionado con los ensamblados System.Web.Http * ...
Kiran Challa
Acabo de publicar todos mis enlaces de ensamblaje.
nzondlo
30

Además de usar la consola del administrador de paquetes para obtener un nuget para actualizar el proyecto con Install-Package Microsoft.AspNet.WebApi.WebHost por falta de GlobalConfiguration ,

Necesitaba Install-Package Microsoft.AspNet.WebApi.SelfHost por no usar System.Web.Http;

Tyeth
fuente
1
¿Puedes explicar un poco más?
Dieter Meemken
10

Es posible que desee verificar que su proyecto se haya Microsoft.AspNet.WebApi.WebHostinstalado. Como resultado, en mi caso, Microsoft.AspNet.WebApi.WebHostse instaló en otro proyecto, pero no en el proyecto particular que lo necesitaba. En su package.config, verifique que haya una línea como esta:

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

Si eso no está presente, no lo ha Microsoft.AspNet.WebApi.WebHostinstalado en su proyecto. Puede instalarlo usando Nuget Package Manager o mediante Package Console Console. Para instalar desde la consola de Package Manager, ejecute este comando:

Install-Package Microsoft.AspNet.WebApi.WebHost
Cameron Tinker
fuente
5

GlobalConfiguration.Configure API está disponible en "Microsoft.AspNet.WebApi.WebHost" version = "5.2.3"

y no en "Microsoft.AspNet.WebApi.WebHost" version = "4.0.0"

usuario3508883
fuente
3

Si el problema persiste después de desinstalar e instalar Microsoft.AspNet.WebApi.WebHost, agregue también lo siguiente en web.config para que funcione la configuración global.

 <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
fuente
Esto ya estaba en mi web.config. Aún tengo problemas (VS2015)
Piotr Kula
2

"Install-Package Microsoft.AspNet.WebApi.Core" funcionó bien.

Terry Mosoma
fuente
1

Mi problema fue que el administrador de paquetes nuget no realizó una actualización real, pero los archivos contenían referencias a versiones anteriores, por lo que primero eliminé todos los paquetes relacionados con mvc instalados (incluidas la razor y la API web), luego los instalé nuevamente y actualicé la versión de la maquinilla de afeitar en views / web.config a la versión 3.0.0.

Soniku
fuente
1

Ninguna de estas soluciones funcionó para mí. Tenía una maraña de paquetes Nuget que no podían actualizarse debido a dependencias circulares entre sí.

Me gustaría tener que arreglar esto a la antigua usanza. Creé un nuevo proyecto MVC / web api y lo copié manualmente System.Web.Httpy System.Web.Http.WebHostdel nuevo proyecto a las carpetas Nuget de la solución existente. A partir de ahí, actualicé las referencias, OMG, "navegando" y solucioné el problema.

Micah B.
fuente
0

esto resolvió este problema agregando espacio de nombres al archivo Global.asax.cs.

usando System.Web.Http;

Esto resolvió el problema.

user1661290
fuente