No se pudo cargar el archivo o ensamblado 'System.Web.Http 4.0.0 después de la actualización de 2012 a 2013

183

Hice la actualización de acuerdo a. http://www.asp.net/mvc/tutorials/mvc-5/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and- web-api-2

Me sale el error ¿Alguien más recibió este error?

Error del servidor en la aplicación '/'.

No se pudo cargar el archivo o ensamblado 'System.Web.Http, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' o una de sus dependencias. La definición de manifiesto del ensamblado ubicado no coincide con la referencia del ensamblado. (Excepción de HRESULT: 0x80131040)
Descripción: se produjo una excepción no controlada durante la ejecución de la solicitud web actual. Revise el seguimiento de la pila para obtener más información sobre el error y dónde se originó en el código.

Detalles de la excepción: System.IO.FileLoadException: No se pudo cargar el archivo o ensamblado 'System.Web.Http, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' o una de sus dependencias. La definición de manifiesto del ensamblado ubicado no coincide con la referencia del ensamblado. (Excepción de HRESULT: 0x80131040)

Error de fuente:

Línea 48: Línea 49: Línea 50:} Línea 51: Línea 52: vacío protegido Application_BeginRequest (remitente de objeto, EventArgs e)

Archivo de origen: d: \ SM \ 7.4Test \ WebAPIServerV2 \ ThirdPartyWebAPI \ Global.asax.cs Línea: 50

Rastreo de carga de ensamblado: la siguiente información puede ser útil para determinar por qué no se pudo cargar el ensamblado 'System.Web.Http, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35'.

=== Información de estado previa al enlace === LOG: DisplayName = System.Web.Http, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 (Completamente especificado) LOG: Appbase = file: /// D: /SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/ LOG: Initial PrivatePath = D: \ SM \ 7.4Test \ WebAPIServerV2 \ ThirdPartyWebAPI \ bin Conjunto de llamadas: ThirdPartyWebAPI, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null. === LOG: este enlace comienza en el contexto de carga predeterminado. LOG: utilizando el archivo de configuración de la aplicación: D: \ SM \ 7.4Test \ WebAPIServerV2 \ ThirdPartyWebAPI \ web.config LOG: utilizando el archivo de configuración del host: C: \ Users \ michalc \ Documents \ IISExpress \ config \ aspnet.config LOG: utilizando la configuración de la máquina archivo de C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ config \ machine.config. LOG: Referencia posterior a la política: System.Web.Http, Versión = 4.0.0.0, Cultura = neutral, PublicKeyToken = 31bf3856ad364e35 LOG: Intento de descarga del nuevo archivo URL: /// C: /Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files / root / 9184b2ea / c6d4b139 / System.Web.Http.DLL. REGISTRO: Intento de descarga del nuevo archivo URL: /// C: /Windows/Microsoft.NET/Framework/v4.0.30319/Temporal ASP.NET Files / root / 9184b2ea / c6d4b139 / System.Web.Http / System.Web.Http .DLL. LOG: Intentando descargar el nuevo archivo URL: /// D: /SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL. WRN: la comparación del nombre del ensamblado resultó en una discordancia: ERR de la versión principal: no se pudo completar la configuración del ensamblado (hr = 0x80131040). Sondeo terminado. Intentando descargar el nuevo archivo URL: /// C: /Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files / root / 9184b2ea / c6d4b139 / System.Web.Http / System.Web.Http.DLL . LOG: Intentando descargar el nuevo archivo URL: /// D: /SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL. WRN: la comparación del nombre del ensamblado resultó en una discordancia: ERR de la versión principal: no se pudo completar la configuración del ensamblado (hr = 0x80131040). Sondeo terminado. Intentando descargar el nuevo archivo URL: /// C: /Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files / root / 9184b2ea / c6d4b139 / System.Web.Http / System.Web.Http.DLL . REGISTRO: Intentando descargar el nuevo archivo URL: /// D: /SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL. WRN: al comparar el nombre del ensamblado se produjo una falta de coincidencia: ERR de la versión principal: no se pudo completar la configuración del ensamblado (hr = 0x80131040). Sondeo terminado. Error al completar la configuración del ensamblaje (hr = 0x80131040). Sondeo terminado. Error al completar la configuración del ensamblaje (hr = 0x80131040). Sondeo terminado.

Seguimiento de pila:

[FileLoadException: no se pudo cargar el archivo o ensamblado 'System.Web.Http, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' o una de sus dependencias. La definición de manifiesto del ensamblado ubicado no coincide con la referencia del ensamblado. (Excepción de HRESULT: 0x80131040)] ThirdPartyWebAPI.WebApiApplication.Application_Start () en d: \ SM \ 7.4Test \ WebAPIServerV2 \ ThirdPartyWebAPI \ Global.asax.cs: 50

[HttpException (0x80004005): No se pudo cargar el archivo o ensamblado 'System.Web.Http, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' o una de sus dependencias. La definición de manifiesto del ensamblado ubicado no coincide con la referencia del ensamblado. (Excepción de HRESULT: 0x80131040)]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode (HttpContext contexto, HttpApplication app) 9935033
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS (IntPtr appContext, HttpContext contexto, MethodInfo [] manipuladores) 118
System.Web.HttpApplication .InitSpecial (estado HttpApplicationState, manejadores MethodInfo [], IntPtr appContext, contexto HttpContext) +172
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance (IntPtr appContext, HttpContext context) +336
System.Web.Hosting.PipelineRuntime.InitializeApplication (IntPtr appContext) +296

[HttpException (0x80004005): No se pudo cargar el archivo o ensamblado 'System.Web.Http, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' o una de sus dependencias. La definición de manifiesto del ensamblado ubicado no coincide con la referencia del ensamblado. (Excepción de HRESULT: 0x80131040)]
System.Web.HttpRuntime.FirstRequestInit (contexto HttpContext) +9913572 System.Web.HttpRuntime.EnsureFirstRequestInit (HttpContext context) +101 System.Web.HttpRuntime.ProiveRequest.


Información de la versión: Microsoft .NET Framework Versión: 4.0.30319; Versión de ASP.NET: 4.0.30319.18408

Michal Asaf Carmeli
fuente
¿Has intentado volver a agregar la referencia a 'System.Web.Http'?
Izikon
44
Por favor marque la respuesta como aceptada.
Aliostad

Respuestas:

288

Lo arreglé reinstalando el paquete NuGet , que corrige dependencias rotas. Desde el administrador de paquetes, ejecute:

Update-Package Microsoft.AspNet.WebApi -reinstall
Pathoschild
fuente
1
Ejecutar la aplicación web localmente estaba bien para mí (F5), pero al implementarlo en un servidor remoto (con WebDeploy) los ensamblajes no se copiaron en el servidor. No estaba seguro de si los ensamblajes deberían haberse copiado o no. De todos modos, después de ejecutar este comando, todos los ensamblajes necesarios se marcaron con copy-local = true y después de implementar la aplicación comenzó a funcionar correctamente
Guillermo Ruffino
3
Solo para agregar una imagen más equilibrada, esto no resolvió el problema para mí.
Lewray
2
Asegúrese de agregar la actualización necesaria a cualquier proyecto dependiente, como pruebas, etc.
DeeArgee
Hice esto y realizó demasiados cambios, pero noté que ajustó los redireccionamientos de enlace en la web.config, descarté todos los otros cambios que hizo y esto funcionó para mí.
Myster
ahora recibo un nuevo error: la nueva versión es Version = 5.2.3.0 y espera Version = 4.0.0.0
Yar
84

Para resolver el error 'No se pudo cargar el archivo o ensamblado' System.Web.Http ', use NuGet para instalar Web Web 2.1 WebHost.

En el explorador de soluciones en las referencias, haga clic derecho y seleccione administrar paquetes nuget. (si no hay, instale nuget)

ingrese la descripción de la imagen aquí

En la ventana de administración de paquetes NuGet en el lado izquierdo, haga clic en línea y luego en la parte superior derecha busque Web Host e instale Microsoft ASP.NET Web API 2.1 Web Host. (Una vez instalado, el botón de instalación cambiará a una marca verde)

Después de eso, el proyecto se volverá a cargar y cuando se vuelva a compilar, el error se resolverá y el proyecto se depurará y ejecutará. El error desaparecerá y es posible que no se encuentre el recurso. Solo agregue la URL (por ejemplo, localhost: 52088 / a localhost: 52088api / products)

Tu pregunta fue buena y me ayudó.

Espero que esta respuesta ayude!

Catto
fuente
Gracias Catto, me sanó mucho.
Saurabh Soni
61

Necesita agregar redireccionamientos de ensamblaje:

<configuration>

   ....

   <runtime>
      <assemblyBinding>
    <dependentAssembly>
        <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
      </assemblyBinding>
   </runtime>

   ...

</configuration>

Lo más probable es que tenga que hacer esto para algunos ensamblajes más como alojamiento web, etc.

Aliostad
fuente
Edité la respuesta. Por alguna razón, el nombre de la DLL fue Castle Windsor cambiado a System.Web.Http.
Aliostad
77
Nunca debe agregar redireccionamientos binarios sin asegurarse de que el nuevo ensamblado sea binario compatible con el anterior.
GETah
18

O puede hacerlo desde la consola de NuGet Package Manager

 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

Y luego podrá agregar la referencia a System.Web.Http.WebHost 5.0

Sameer Alibhai
fuente
funciona para mí, solo instale Install-Package Microsoft.AspNet.WebApi
Djama
17

Cuando instalé la ayuda de Web Api 2.2, comenzó este error. Agregué esto a web.config y resolvió mi problema.

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.2.0" newVersion="5.2.2.0" />
  </dependentAssembly>
jhilden
fuente
1
Lo mismo aquí en un proyecto que era Web Api 2.2 desde el principio, cuando se publicaba en Azure. El proyecto funcionó bien localmente, pero en Azure recibí el error del OP. Al agregar estas líneas a web.config y volver a publicar en Azure, se solucionó.
AronVanAmmers
4

Simplemente configuré Copy Local = trueel ensamblaje perdido y funcionó. Esto, por supuesto, sucede haciendo clic derecho sobre la referencia que falta (que se indica en el mensaje de error) y seleccionando propiedades; como a continuación:

ingrese la descripción de la imagen aquí

Esto debería resolver un problema, ya que podría haber más de un ensamblaje causando el problema: lo que hice fue seleccionar todos los ensambles y hacer clic derecho en ellos; propiedades seleccionadas; y configúrelos todos para Copiar Local = verdadero; y luego republicar.

t_plusplus
fuente
1
Funcionó perfectamente. Solo tenía que hacer "Copiar local = verdadero" en System.Web.Http y System.Net.Http.Formatting
Sandip Subedi
4

La solución adecuada para resolver este problema es siguiendo los pasos

. Actualice Visual Studio si tiene una versión anterior a 15.5.4 (Opcional)

  1. Elimine todos los redireccionamientos de enlace de web.config

  2. Agregue esto al archivo csproj:

 <PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
  1. Construir.

  2. En la carpeta bin, debe haber un (WebAppName).dll.configarchivo.

  3. Debería tener redireccionamientos en él. Copie estos en la web.config

  4. Elimine lo anterior recortado del archivo csproj nuevamente

  5. Deberia de funcionar

Detailed Blog

Sajeetharan
fuente
no crea todos los enlaces
batmaci
3

Para mí, solo estaba fallando con este error en un entorno de producción, no en una máquina local; lo que resolvió fue eliminar el contenido de la carpeta / bin y luego volver a generarlo.

Oana
fuente
Esto es algo que la gente debería verificar. Yo estaba teniendo el mismo problema. Resultó que había un dll innecesario para Microsoft.AspNet.Cors en el front-end de mi aplicación. Eliminé la carpeta bin en los sistemas de productos, volví a publicar el sitio y magic.
Ron
2

Solo una sugerencia útil obvia pero posible ... recuerde verificar que la nueva versión que especifique en su enlace de ensamblaje webconfig sea la misma versión a la que hace referencia en las referencias de su proyecto. (es decir, mientras escribo esto ... esto sería 5.1.0.0 si recientemente ha realizado un NUGet en System.Web.Http

Jim Taliadoros
fuente
2
 Installing NuGet package ASP.NET.MVC solved the issue for me. 
 To install package.
 - Right click on project 
 - Select "Manage NuGet Packages"
 - Select Online->Nuget.org from left menu
 - select "Microsoft ASP.NET MVC"
 - Click Install

 If you have already installed package earlier, please update the package by selecting Updates from left menu and then selecting "Microsoft ASP.NET" and click Update.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Arvind Krmar
fuente
2

Esto podría ayudar a alguien.

Decidí ir con la aplicación MVC4.

ejecutar proyecto, trabajado

Luego instalé algunos paquetes, como
Microsoft ASP.NET WEB API 2.2 (4 paquetes)
Microsoft ASP.NET WEB API 2.2 Página de ayuda
Microsoft ASP.NET WEB API 2.2 OWIN

ejecutar proyecto, el mismo error que se menciona en la pregunta

Solución:

En web.config

 <dependentAssembly>
      <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.3.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.3.0" />
 </dependentAssembly>


Problema resuelto


pero luego, se encontró un error de revisión . Para resolverlo, vaya a la carpeta VIEW de su proyecto MVC4, busque second el archivo web.config y cambie la versión de 2.0.0.0 a 3.0.0.0 como se muestra a continuación.


<configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>

micronyks
fuente
2

En mi caso, en realidad me faltaba por web.configcompleto, que tenía los redireccionamientos de enlace apropiados. Restaurando el web.configresuelto el error.

Brandon Hawbaker
fuente
2

Podría resolver un problema similar con System.Net.HTTP agregando una referencia de ensamblaje en app.config de la aplicación principal.

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.1.1.1" newVersion="4.0.0.0" />
      </dependentAssembly></runtime>
Parag Bangad
fuente
1

¡Encontré la solución! Elimine la carpeta llamada paquete en el directorio del proyecto y luego reconstruya para ejecutarlo.

Ashitosh birajdar
fuente
1
<dependentAssembly>
    <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
<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>
ravula sandeep
fuente
1

¡¡¡SI!!!

Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

Funciona bien en mi caso ... gracias

X-Coder
fuente
2
Esto es solo un duplicado de una respuesta existente . Como parece que no tiene nada más que agregar, considere eliminar este.
zzzzBov
1

No hice nada, solo copié las DLL de la carpeta Bin de desarrollo en la carpeta Bin implementada en línea y funcionó bien para mí.

Anjan Kant
fuente
0

Como han dicho otros, simplemente reinstale el paquete MVC a su proyecto web usando nuget, pero asegúrese de agregar el paquete MVC a cualquier proyecto dependiendo del proyecto web, como las pruebas unitarias. Si crea cada proyecto incluido individualmente, verá que los brujos requieren la actualización.

DeeArgee
fuente
0

Tuve el mismo problema y la reinstalación del paquete no funciona.

Mi aplicación se ejecuta en LocalIIS (no IIS EXPRESS). Habilito el seguimiento de carga de ensamblaje y descubro que desea cargar System.Web.Http cargar desde debajo de la captura temporal. así que elimine todas las carpetas de captura .

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Archivos temporales ASP.NET [mi aplicación]

Mohammadreza
fuente
0

Resolví este problema revirtiendo los cambios que Nuget había realizado en mi web.configdespués de ejecutar nuget. Revierta los cambios a una versión de trabajo anterior.

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.2.0" newVersion="5.2.2.0" />
  </dependentAssembly>
roo2
fuente
0

Lo que resolvió el problema para mí fue reinstalar la página de ayuda de Microsoft ASP.NET Web API 2.2 y los paquetes OWIN de Microsoft ASP.NET Web API 2.2 . Reinstalé ambas al mismo tiempo, pero creo que fue la primera la que solucionó el problema.

Probé las primeras soluciones ofrecidas aquí, pero eso no ayudó, luego comparé mis dependencias con las de un proyecto que funcionó (de un curso en Pluralsight) y las dos dependencias anteriores eran una versión inferior (5.0.0 ) así que los actualicé a 5.2.3 y comenzó a funcionar.

lukegf
fuente
0

Tuve esto de un servicio WCF. Para mí (ya que el problema se mostraba en el desarrollador local), simplemente tuve que eliminar el contenido de la carpeta bin bajo la solución. La reconstrucción funciona bien una vez más.

DubMan
fuente
0

Versión ASP.NET: 4.0.30319.18408 pertenece a .Net4.5 y System.Web.Http Version = 4.0.0.0 es compatible con .NET4.0. Entonces las versiones que tienes no son compatibles. Debe actualizar su System.Web.Http a la versión 5.0.0.0, que es compatible con .Net4.5

oscarMg
fuente
0

Tuve un problema similar. Todo estaba funcionando antes. Originalmente se hizo usando formularios web y luego se agregó API web para algunas cosas.

  • Intenté desinstalar, instalar y reinstalar el paquete Microsoft.AspNet.WebApi.
  • Intenté eliminar la carpeta de paquetes de la solución y dejar que NuGet se restaure en VS.
  • Intenté eliminar referencias de ensamblaje individuales (en Referencias) y reinstalar paquetes.
  • Intenté agregar redireccionamientos vinculantes a la versión 5.2.3.0 en web.config mencionado en varias respuestas. Nada me funcionó.

Lo que funcionó fue, en Visual Studio, cambiar la configuración del perfil de publicación de Release a Debug. Extraño, pero eso fue lo que funcionó. Entonces compartiendo aquí.

joym8
fuente
0

Recibí este problema al implementar en Azure con la función Publicar. Recuerde borrar archivos en el destino.

Publish Settings -> File Publish Options drop down -> Check Remove additional files at destination

Esto resolvió mi problema, en caso de que la gente tenga que buscar esto como lo hice yo. Todo era la misma versión en mi proyecto / solución, pero no en el destino en el que estaba implementando.

Shelby115
fuente
0

Si usa varios proyectos en una solución y llama al método en un proyecto a otro proyecto, asegúrese de que todos los proyectos (llamados proyecto y proyecto llamante) usen la 'System.Net.Http'versión única .

MohammadSoori
fuente
0

Cambie el indicador de versión Specfic de verdadero a falso para el dll en la referencia

usuario2992715
fuente
0

Tuve el mismo problema con System.Web.Http.WebHost, se hace referencia a la Versión = 5.2.6.0 pero el último paquete NuGet fue 5.2.7.0. Edité los archivos web.config, reinstalé el paquete NuGet, luego edité los archivos de proyecto de Visual Studio para todos mis proyectos para asegurarme de que no persistiera ninguna referencia a 5.2.6.0. Incluso después de todo esto, el problema persistió.

Luego busqué en la carpeta bin el proyecto que arrojaba la excepción, donde encontré una DLL para uno de mis otros proyectos que no es una dependencia y que nunca debería haber estado allí. Eliminé la DLL ofensiva (que había sido compilada usando la versión 5.2.6.0 de System.Web.Http.WebHost), reconstruí el proyecto problemático y ahora está funcionando.

cghore
fuente