Error Microsoft.Web.Infrastructure, Versión = 1.0.0.0, Cultura = neutral, PublicKeyToken = 31bf3856ad364e35

92

Tengo una pequeña aplicación web. Lo cual funcionaba bien hasta que agregué dos genericHandler en mi aplicación.

Hice los siguientes cambios para el controlador http

 <system.web>
    <authentication mode="Forms" >
        <forms protection="All" timeout="720" defaultUrl="Default.aspx" loginUrl="Login.aspx" >
        </forms>
    </authentication>
    <authorization>
        <deny users="?"/>
    </authorization>
    <compilation debug="true" targetFramework="4.0" />

    <httpHandlers>
        <!--Code Log Handler-->
        <add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory" />
        <add verb="*" type="InfoDomeNewUI.Handler.SendOWA" path="SendOWA.ashx" />
        <add verb="*" type="InfoDomeNewUI.Handler.SendSOS" path="SendSOS.ashx" />
    </httpHandlers>
    <customErrors mode="Off">
        <error statusCode="404" redirect="Templates/PageNotFound.html" />
    </customErrors>
</system.web>
<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
        <!--Code Log Handler-->
        <add name="LogHandler1" path="SendOWA.ashx" verb="*" type="InfoDomeNewUI.Handler.SendOWA"/>
        <!-- SMS SENDER-->
        <add name="SendSOS" path="SendSOS.ashx" verb="*" type="InfoDomeNewUI.Handler.SendSOS"/>
    </handlers>
</system.webServer>

Could not load file or assembly 'Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.

Estoy usando asp.net4.0 y C #. No estoy usando MVC
en el host local, está funcionando bien.
Pero cuando alojo el código publicado me está dando el error anterior.

Seguimiento de pila: -

[FileNotFoundException: no se pudo cargar el archivo o ensamblado 'Microsoft.Web.Infrastructure, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' o una de sus dependencias. El sistema no puede encontrar el archivo especificado.] System.Web.Http.WebHost.SuppressFormsAuthRedirectModule.Register () +0

[InvalidOperationException: el método de inicialización de inicio previo a la aplicación Start en el tipo System.Web.Http.WebHost.PreApplicationStartCode arrojó una excepción con el siguiente mensaje de error: No se pudo cargar el archivo o ensamblado 'Microsoft.Web.Infrastructure, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 'o una de sus dependencias. El sistema no puede encontrar el archivo especificado.] System.Web.Compilation.BuildManager.InvokePreStartInitMethods (métodos ICollection`1) +11708830 System.Web.Compilation.BuildManager.CallPreStartInitMethods () +465 System.Web.Hosting.HostingEnvironment ( ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLeve

[HttpException (0x80004005): el método de inicialización de inicio previo a la aplicación Iniciar en el tipo System.Web.Http.WebHost.PreApplicationStartCode arrojó una excepción con el siguiente mensaje de error: No se pudo cargar el archivo o ensamblado 'Microsoft.Web.Infrastructure, Versión = 1.0 .0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 'o una de sus dependencias. El sistema no puede encontrar el archivo especificado ..] System.Web.HttpRuntime.FirstRequestInit (contexto HttpContext) +11697760 System.Web.HttpRuntime.EnsureFirstRequestInit (contexto HttpContext) +141 System.Web.HttpRuntime.ProcessWRequestNotification7) +4866485

शेखर
fuente
1
La instalación de Microsoft.Web.Infrastructure.dll desde el paquete nuget funcionó para mí.
ATUL SHARMA

Respuestas:

197

Parece que Microsoft.Web.Infrastructure.dll no se está instalando en el GAC, incluso si .net (4.0 o 4.5 u otro) se instaló correctamente en Windows Server. En localhost (normalmente cliente de Windows), parece que está en el GAC cuando se instalan las herramientas / plataforma (Visual Studio, etc.).

Como una posible solución, intente lo siguiente:

  1. Ejecute el siguiente comando en la Consola del Administrador de paquetes. (Si está utilizando Visual Studio, puede acceder a esto a través de las opciones de menú "Herramientas -> Administrador de paquetes de biblioteca -> Consola del administrador de paquetes :)

    PM> Install-Package Microsoft.Web.Infrastructure

    Verá los siguientes mensajes si se instaló correctamente.

    Successfully installed 'Microsoft.Web.Infrastructure 1.0.0.0'.
    Successfully added 'Microsoft.Web.Infrastructure 1.0.0.0' to Web.
  2. Notará que Microsoft.Web.Infrastructure.dll ahora se ha agregado como referencia (se puede ver en la carpeta de referencias de su proyecto en el Explorador de soluciones)

  3. Si observa las propiedades de esta referencia, notará que " Copiar local " se ha establecido en " Verdadero " de forma predeterminada.

  4. Ahora, cuando "publique" su proyecto, se implementará Microsoft.Web.Infrastructure.dll .

Rockyb
fuente
2
¡Gracias, eso resolvió mi problema! Estaba usando un controlador WebApi en mi aplicación Webforms y la implementación falló debido al mensaje de error mencionado. Al agregar la referencia a mi proyecto y copiar el .dll, pude hacer que funcionara.
magnático
1
Inicialmente intenté pasar por la interfaz "Administrar paquetes NuGet para esta solución", pero simplemente decía que Microsoft.Web.Infrastructure.dll ya estaba instalado, aunque no pude ver una referencia a él en ninguna parte. Al ejecutar su línea de comando, pude instalar en la parte superior, ver una referencia, configurar para copiar local, volver a implementar ... fijo. ¡¡Gracias!!
hardba11
1
Lo instalé con el Administrador de paquetes pero ya estaba instalado. Pero no pude ver la referencia en el proyecto. Así que lo agregué yo mismo y configuré Copiar local en Verdadero =)
Akira Yamamoto
27
Tenga en cuenta que en algunos casos aparece el mensaje "Webapp ya tiene una referencia a 'Microsoft.Web.Infrastructure 1.0.0.0'.". Utilice "Paquete de actualización Microsoft.Web.Infrastructure -Reinstall" en esos casos.
Robba
1
Ya lo tenía instalado, pero 'Copiar local' se estableció en falso. ¡Cambiarlo a verdadero lo solucionó! Gracias
Lyall
19

Instalé MVC4 a través de WPI y me ayudó.

Alex Shyba
fuente
1
Este funcionó para mí ya que mi problema estaba en el servidor pero no en mi máquina.
Juan
14

Yo tuve el mismo problema. Cuando probé la respuesta aceptada (rockyb), recibí el mensaje de que el paquete ya estaba instalado y asignado a mi proyecto. Sin embargo, cuando verifiqué la lista de referencias, NO se hizo referencia a ella.

Microsoft.Web.Infrastructure se instaló en la carpeta de paquetes de mi solución. En lugar de usar NuGet para agregar el paquete, solo usé la opción Agregar referencia. En el lado izquierdo de la ventana emergente, elegí Examinar y luego presioné el botón Examinar en la parte inferior de la ventana. Navegué hasta la carpeta de paquetes debajo de la carpeta en la que estaba mi solución, luego profundicé en ... \ mysolution \ packages \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40 y hice clic en Microsoft.Web.Infrastructure .dll. Después de hacer clic en Aceptar, el paquete apareció en mi lista de referencias. Usé la opción Web Deploy Package para implementar mi sitio web y todo funcionó.

Glenn Gordon
fuente
1
Dinero. Dado que esta respuesta es tan reciente y la aceptada (que tampoco funcionó para mí) es tan antigua, supongo que esto tiene algo que ver con una versión actualizada de Visual Studio. ¡Gracias!
chiliNUT
1
Como dijo Robba en un comentario sobre una respuesta diferente, puede resolver el problema de que no está en la lista de referencias (pero el paquete está instalado) con: "Paquete de actualización Microsoft.Web.Infrastructure -Reinstall". Creo que es mejor que buscar la asamblea.
Jim W dice reinstalar a Monica
9

¿Por qué no copiar el archivo Microsoft.Web.Infrastructure.dll manualmente en la carpeta BIN del servidor? Esto funciona para. Mi proyecto es el sitio web VS2010.

Este archivo se puede ubicar:

C: \ Archivos de programa (x86) \ Microsoft ASP.NET \ ASP.NET MVC 4 \ Packages \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40

Simplemente cópielo y péguelo en la carpeta BIN.

Probablemente necesite incluir esto en web.config si aún no lo tiene

<compilation debug="true" targetFramework="4.0">
  <assemblies>
    <add assembly="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  </assemblies>
</compilation>

Referencia: http://thedeveloperblog.com/

BenW
fuente
6

Encontré el problema. En lugar de agregar un (.cs)archivo de clase por error, agregué una Web API Controllerclase que agregó un archivo de configuración en mi solución. Y ese archivo de configuración buscaba la DLL mencionada (Microsoft.Web.Infrastructure 1.0.0.0). Funcionó cuando eliminé ese archivo, limpié la aplicación y luego publiqué.

शेखर
fuente
4

Después de instalar Microsoft.Web.Infrastructure a través de Nuget-Package Manager

PM> Install-Package Microsoft.Web.Infrastructure

Copie el archivo Microsoft.Web.Infrastructure.dllmanualmente desde la Nuget-Packagecarpeta de su aplicación web y luego péguelo en la carpeta bin de su aplicación web implementada en el servidor web.

paquetes \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40 \ Microsoft.Web.Infrastructure.dll

Funcionó para mí.

Gokulnath
fuente
Uninstall-Package Microsoft.Web.Infrastructure (luego verifique cualquier cambio si usa Team Foundation Server) y luego Install-Package Microsoft.Web.Infrastructure funcionó para mí.
GJKH
3
a veces, hackear es la única forma de hacer que un producto de microsoft funcione
eagor
Esto funcionó para mí también. sí, fue un truco pero ahorró mucho tiempo. cómo se eliminó automáticamente de la papelera es un misterio
Heemanshu Bhalla
4

Update-Package -reinstall Microsoft.Web.Infrastructure no funcionó para mí, ya que seguía recibiendo errores de que ya estaba instalado.

Tuve que navegar a Microsoft.Web.Infrastructure.1.0.0.0 carpeta en la carpeta de paquetes y eliminar manualmente esa carpeta.

Después de hacer esto, ejecutarlo lo Install-Package Microsoft.Web.Infrastructureinstaló.

Nota: CopyLocalse estableció automáticamente en verdadero.

contactmatt
fuente
no funcionó en mi caso.
elimino la
0

Tuve el mismo problema y parecía que faltaba "Microsoft.Web.Infrastructure.dll". Probé algunos consejos e instalé MVC, etc. y nada ayudó. La solución fue instalar "Web Services Enhancements (WSE) 1.0 SP1 para Microsoft .NET" que incluye Microsoft.Web.Infrastructure.dll. Disponible en: http://www.microsoft.com/en-gb/download/details.aspx?id=4065

Zly-Zly
fuente
0

Yo tuve el mismo problema. Intenté instalar Visual Studio 2010 SP1 pero no funcionó.

Finalmente obtengo Microsoft.Web.Infrastructure.dll del colega. Puede encontrar el dll en la PC de sus amigos donde el proyecto está funcionando perfectamente. Intente buscar dll en archivos ASP.NET temporales / temporales. Vaya a Temp usando% temp% en la ventana de ejecución.

Después de instalar dll en su PC, simplemente agregue una referencia a su proyecto y funcionará.

Ankit
fuente
0

Volver a publicar el sitio solucionó el problema.

Filadelfia, NJ
fuente
0

Estaba enfrentando el mismo problema y, desafortunadamente, nada aquí funcionaba. Finalmente, encontré este enlace: https://blogs.msdn.microsoft.com/jjameson/2009/11/18/the-copy-local-bug-in-visual-studio/

Resulta que la solución es algo tonta: configure copy-local para microsoft.web.infrastructure dll en False, luego configúrelo de nuevo en True.

Por cierto, creo que lo que está sucediendo es que hay dos versiones de la dll microsoft.web.infrastructure, una que está preinstalada en el GAC y otra que ahora es un paquete nuget. Creo que uno enmascara al otro, por lo que causa problemas. En mi caso particular, en mi servidor de compilación, necesito que se copie en una carpeta (esta carpeta se comprime y se envía a la implementación). Supongo que el sistema tenía una copia local y solo pensó "no, estará bien"

intercambio_información
fuente
0

Tengo un sitio web solo de archivos. Se agregó MVC 5 a la aplicación de formularios web (dirigido a net45). Tuve que modificar el packages.config

package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net45"

a

package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net45" developmentDependency="true"

para que se inicie en el cuadro local en modo de depuración (anteriormente tenía el error descrito arriba). Ejecutando VS 2017 en Windows 7 ... abierto a través de Archivo> Abrir> Sitio web> Archivo (elija el directorio raíz fuera de IIS).

Galán
fuente
0

Tuve el mismo problema después de actualizar varios paquetes NuGet.
He intentado todo tipo de eliminación, limpieza, restauración descrita aquí y más en vano. Las referencias no tenían Microsoft.Web.Infrastructure a pesar de que el administrador de NuGet mostró que estaba instalado.

El problema se resolvió reemplazando:

  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />

con

  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net46" />

en packages.config. El culpable es aparentemente "net45".

Hong
fuente