No se pudo cargar el archivo o ensamblado 'Microsoft.Web.Infrastructure,

79

Intenté subir mi sitio web a un servidor. Funcionaba bien con mi host local, así que cargué todo en mi wwwrootcarpeta localhost al servidor y cambié la cadena de conexión.

Pero existe este error:

Exception information: 
    Exception type: InvalidOperationException 
    Exception message: The pre-application start initialization method Start on type RouteDebug.PreApplicationStart threw an exception with the following error message: 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..
   at System.Web.Compilation.BuildManager.InvokePreStartInitMethods(ICollection`1 methods)
   at System.Web.Compilation.BuildManager.CallPreStartInitMethods()
   at System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException)

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.
   at RouteDebug.PreApplicationStart.Start()

El proyecto fue nopcommerce.

¿Qué se debe hacer para resolver este error?

usuario1348351
fuente
la copia probablemente no funcionó porque el host no tiene instaladas las mismas dependencias, consulte esta guía: iwantmymvc.com/2011-03-23-bin-deploy-aspnet-mvc-3-visual-studio
Mike Trusov

Respuestas:

57

Deberá incluir el dll con su proyecto y agregarle una referencia también.

Aquí hay un enlace a un problema similar que ya está en Stack: Problemas de dependencia de implementación de MVC3

Colin Pera
fuente
¿Tiene que cargar el floder "_bin_deployableAssemblies" también en el servidor?
user1348351
Hay algunas formas diferentes de manejar esto y también depende de cómo se esté implementando. Pero si hace clic en el enlace en mi publicación y luego revisa el blog en la respuesta superior con la marca de verificación, verá que si lo configura correctamente, se supone que los dlls de _bin_deployableAssemblies se atienden automáticamente cuando realiza una implementar (o implementar en la Web). Aquí está el enlace al blog que mencioné.
Colin Pear
5
Parece que el blog al que sigue este enlace ya no está disponible. Esta respuesta: stackoverflow.com/a/12683392/137474 funcionó para mí.
Baldy
@ColinPear, muchas gracias, justo lo que estaba buscando. ¡Tenía una aplicación web de comercio electrónico que lo solicitaba !.
PatsonLeaner
en mi caso, mi sitio funciona en plesk sin "Microsoft.Web.Infrastructure.dll" pero cuando me muevo a cpanel se muestra este error.
Omid-RH
39

Resulta que después de hacer una limpieza de referencia, se eliminó Microsoft.Web.Infrastructure, pero no del archivo packages.config. Después de intentar agregarlo nuevamente usando el Package Manager Console, Visual Studio dice que ya está instalado, lo cual es falso porque se eliminó.

Luego eliminé la línea de código en el packages.configarchivo

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

y ejecuté el comando de nuevo

PM> Install-Package Microsoft.Web.Infrastructure

Después de esto, ahora funciona bien.

Riaan de Lange
fuente
32

Instalar AspNetMVC3ToolsUpdateSetup descargado desde aquí resolvería este problema sin agregar referencia

Sgurijala
fuente
28

A pesar de la cantidad de respuestas, agregaré otra que, en mi humilde opinión, aclara un poco las cosas.

Como Rob y wrightmail ya han mencionado, Microsoft.Web.Infrastructurees un paquete NuGet (el enlace no es necesario, lo tiene en el Administrador de paquetes NuGet).

Aparentemente, su proyecto hizo referencia a él y de repente desapareció. Puede existir una serie de razones, pero lo importante es que, a pesar de que puede haber habilitado la Restauración automática de paquetes en Visual Studio :

  • Administrar paquetes NuGet para la solución (menú contextual en el Explorador de soluciones),
  • Permitir que NuGet descargue los paquetes que faltan (configuración),
  • Verifique automáticamente si faltan paquetes durante la compilación en Visual Studio (configuración),

ciertos paquetes pueden requerir una reinstalación manual. No sé qué confunde a NuGet, tal vez eliminar manualmente una referencia, pero aquí está la solución que suelo aplicar en tales casos. La siguiente consola de PM ayuda a restaurar un paquete mientras conserva la versión original (sin actualizar a una nueva posiblemente existente):

Paquete de actualización Microsoft.Web.Infrastructure -Reinstalar

Es posible que se requiera la conservación de la versión si no desea sobrescribir accidentalmente un paquete existente con su versión más reciente, lo que posiblemente elimine la funcionalidad "antigua" que haya utilizado en su proyecto.

Y, como prueba, a pesar de ser un poco larga, de que la versión no cambia, aquí está el resultado cuando se ejecuta el comando:

PM> Update-Package Microsoft.Web.Infrastructure -Reinstall
Attempting to gather dependencies information for multiple packages with respect to project 'Samples.NuGet\DemoApp\DemoApp', targeting '.NETFramework,Version=v4.5.2'
Attempting to resolve dependencies for multiple packages
Resolving actions install multiple packages
...
Package removal starts here...
...
Removed package 'Microsoft.AspNet.Web.Optimization 1.1.3' from 'packages.config'
Successfully uninstalled 'Microsoft.AspNet.Web.Optimization 1.1.3' from DemoApp
Removed package 'WebGrease 1.5.2' from 'packages.config'
Executing script file 'D:\Projects\DemoApp\packages\WebGrease.1.5.2\tools\uninstall.ps1'
Successfully uninstalled 'WebGrease 1.5.2' from DemoApp
...
More package removals here. Omitted for brevity...
...
Removed package 'Microsoft.Web.Infrastructure 1.0.0.0' from 'packages.config'
Successfully uninstalled 'Microsoft.Web.Infrastructure 1.0.0.0' from DemoApp
...
More package removals here. Omitted for brevity...
...
Removed package 'Antlr 3.4.1.9004' from 'packages.config'
Successfully uninstalled 'Antlr 3.4.1.9004' from MvcLenseApp
Package 'Antlr.3.4.1.9004' already exists in folder 'D:\Projects\Lense.Mvc5\packages'
--- Install packages (in reverse order) ---
Package 'Antlr.3.4.1.9004' already exists in folder 'D:\Projects\DemoApp\packages'
Added package 'Antlr.3.4.1.9004' to 'packages.config'
Successfully installed 'Antlr 3.4.1.9004' to DemoApp
...
More package installs here. Omitted for brevity...
...
Package 'Microsoft.Web.Infrastructure.1.0.0' already exists in folder 'D:\Projects\Lense.Mvc5\packages'
Added package 'Microsoft.Web.Infrastructure.1.0.0' to 'packages.config'
Successfully installed 'Microsoft.Web.Infrastructure 1.0.0' to MvcLenseApp
...
More package installs here. Omitted for brevity...
...
Package 'WebGrease.1.5.2' already exists in folder 'D:\Projects\DemoApp\packages'
Added package 'WebGrease.1.5.2' to 'packages.config'
Executing script file 'D:\Projects\DemoApp\packages\WebGrease.1.5.2\tools\install.ps1'
Successfully installed 'WebGrease 1.5.2' to DemoApp
Package 'Microsoft.AspNet.Web.Optimization.1.1.3' already exists in folder 'D:\Projects\DemoApp\packages'
Added package 'Microsoft.AspNet.Web.Optimization.1.1.3' to 'packages.config'
...
End of package re-install. 
...
Successfully installed 'Microsoft.AspNet.Web.Optimization 1.1.3' to DemoApp
PM> 

Por supuesto, si desea reinstalar todos los paquetes, es posible que deba familiarizarse con los comandos de actualización / instalación en NuGet aquí y aquí .

Alexander Christov
fuente
27

Descubrí que aunque funcionaba en mi caja de desarrollo, el ensamblaje no se agregó al proyecto. Busque Microsoft.Web.Infrastructure en NuGet e instálelo desde allí. Luego, asegúrese de que haya seleccionado Copiar local.

jwrightmail
fuente
1
El mismo problema, estaba en CopyLocal = True, no tengo idea de por qué no funcionó. Tu solución resolvió mi problema :)
GôTô
6

Experimenté este problema en una nueva máquina con Windows 10 en VS2015 con un proyecto existente. Administrador de paquetes 3.4.4. Restaurar paquetes habilitados.

La restauración no parece funcionar completamente. Tuve que ejecutar lo siguiente en la línea de comandos del Administrador de paquetes

Update-Package -ProjectName "YourProjectName" -Id Microsoft.Web.Infrastructure -Reinstall

Esto hizo los siguientes cambios en mi archivo de solución que la restauración NO hizo.

<Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
  <Private>True</Private>
</Reference>

Simplemente agregando los elementos anteriores a la sección ItemGroup en su archivo de solución TAMBIÉN resolverá el problema siempre que exista .. \ packages \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40 \ Microsoft.Web.Infrastructure.dll.

Es más fácil simplemente hacer la -Reinstalación, pero es bueno comprender qué hace de manera diferente a la restauración del paquete.

Rohan
fuente
Yo tuve el mismo problema. Intenté "Restaurar paquetes nuget" en la opción del menú contextual de la solución. La salida me dijo que no había nada que restaurar. Siguiendo su consejo, ejecuté Update-Package -ProjectName "mi nombre de proyecto aquí" desde la consola del administrador de paquetes y todos los paquetes se agregaron correctamente
Rob Bowman
@RobBowman Eso es genial Rob. Puede que no importe en su caso, pero tenga cuidado de incluir también el indicador -Reinstall. Esto asegurará que terminará con las mismas versiones de paquete que antes. Si omite este indicador, actualizará su paquete a la última versión, lo que puede causar problemas si no tenía la intención de hacerlo. Consulte esto para obtener información completa docs.microsoft.com/en-us/nuget/tools/ps-ref-update-package
Rohan
5

Resharper detectó Microsoft.Web.Infrastructure como una referencia no utilizada y lo eliminé. Localmente funcionaba bien, pero luego recibí el mismo error después de publicarlo en dev.

Conclusión, tenga cuidado al eliminar referencias marcadas como no utilizadas por Resharper

Javier
fuente
Eso fue exactamente lo que hice.
AndreFeijo
en mi caso, mi sitio funciona en plesk sin "Microsoft.Web.Infrastructure.dll" pero cuando me muevo a cpanel se muestra este error.
Omid-RH
3

Tuve un problema similar. NuGet mostró que el paquete se instaló correctamente, pero la referencia no se agregó a mi proyecto.

La ejecución <PM> Install-Package Microsoft.Web.InfraStructuretampoco ayudó, ya que el administrador de paquetes seguía diciendo que ya estaba instalado

Finalmente lo agregué manualmente editando el archivo csproj y agregando estas líneas:

 <Reference Include="Microsoft.Web.Infrastructure">
  <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
  <Private>True</Private>
</Reference>

Eso resolvió el problema.

recuerdo de un sueño
fuente
Verifiqué el archivo csproj y hacía referencia a una carpeta que estaba causando el problema. Eliminar ese nombre de carpeta adicional resolvió mi problema
superachu
2

Debe descargar el marco ASP.NET MVC en el servidor que aloja su aplicación. Es una solución rápida, simplemente descárguela e instálela desde aquí (este es el marco MVC 3 http://www.asp.net/mvc/mvc3 ), entonces boom, ya está listo.

KickerKeeper
fuente
2

Para mí Microsoft.Web.Infrastructure.dll, faltaba en la carpeta bin, no estaba configurado para copiar local en el proyecto. Copió el dll de otro proyecto en la solución y se carga la página.

Alex Hedley
fuente
2

Primero elimine Microsoft.Web.Infrastructure de package.config.

y ejecuté el comando de nuevo

PM> Install-Package Microsoft.Web.Infrastructure y asegúrese de que la propiedad Copiar local sea verdadera.

Amrendra
fuente
1

Solución muy sencilla:

En Visual Studio, vaya a Herramientas / Administrador de paquetes de biblioteca / Consola del administrador de paquetes

<PM> Install-Package Microsoft.Web.InfraStructure

Pasar un buen rato

Omid Rahimi
fuente
1

Aquí estaba mi escenario.

Tenía una solución multiproyecto que contenía los proyectos A, B, C .. N.

El Proyecto B era una biblioteca de códigos que contenía una fábrica de selectlistobjetos.

El proyecto se ejecutaría como se esperaba en desarrollo, pero al publicar en nuestro entorno de prueba recibí el error que estaba encontrando:

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.

Lo que sucedió fue a través del administrador de paquetes nuget, instalé accidentalmente "Microsoft ASP.NET MVC" que instaló dependencias para:

  • Microsoft.AspNet.Razor
  • Microsoft.AspNet.WebPages

Bajo y he aquí, Microsoft.AspNet.WebPages depende de "Microsoft.Web.Infrastructure".

Mi solución fue desinstalar los tres paquetes mencionados anteriormente (MVC, Razor, WebPages) y luego hacer clic con el botón derecho en referencias> agregar referencia> Ensamblados> Extensiones> System.Web.MVC.

Robar
fuente
No pude agregar a través de Assembles, pero volver a agregar los paquetes Nuget resolvió el problema
Nitesh
1

Tuve que establecer "Copiar local" en las Propiedades de referencia en Falso, luego volver a Verdadero. Al hacer esto, se agregó la configuración Privada verdadera al archivo .csproj.

<Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">      <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
      <Private>True</Private>
    </Reference>

Supuse que esto ya estaba configurado, ya que "Copiar local" se mostró como Verdadero.

Paciencia
fuente
0

No sé qué pasó con mi proyecto, pero hacía referencia a la ruta incorrecta a la DLL. Nuget lo instaló correctamente y, de hecho, estaba en mi sistema de archivos junto con los otros paquetes, pero solo se referenciaba incorrectamente.

La packagescarpeta existe dos directorios desde mi proyecto y solo subía uno al comenzar la ruta con ..\packages\. Cambié la ruta para empezar ..\..\packages\y solucionó mi problema.

Jeff LaFay
fuente
0

En mi máquina, la dependencia de Nuget no se descargó correctamente, la carpeta lib dentro del paquete nuget no existía, de ahí el error.

antes de

ingrese la descripción de la imagen aquí

Cambié el nombre del paquete Nuget en la carpeta de paquetes y Nuget lo volvió a descargar correctamente con la carpeta lib necesaria.

Después ingrese la descripción de la imagen aquí

Morgan Kenyon
fuente
0

En algunos casos el proyecto de limpieza / solución, la eliminación física bin/y la obj/y la reconstrucción podría resolver este tipo de errores. Esto podría suceder cuando, por ejemplo, algunos paquetes y referencias se instalan / agregan y luego se eliminan, dejando algunos artefactos atrás.

Me pasó con Microsoft.Web.Infrastructure: inicialmente, el proyecto no requería ese montaje. Después de algunos experimentos, cuyo efecto neto se suponía que era cero al final, obtuve esta excepción. Los pasos anteriores lo resolvieron sin la necesidad de instalar la dependencia no utilizada.

Oleg Shirokikh
fuente
0

Tuve este problema. Tenía la DLL incluida en el proyecto y la configuración de Copiar local era verdadera de forma predeterminada. No sé por qué comenzó, ya que esa DLL estuvo en el proyecto durante mucho tiempo. Escuché algunas menciones de que ReSharper posiblemente lo eliminó, pero no puedo decir que haya ejecutado una eliminación de referencia no utilizada.

Lo que me ayudó fue: - Ejecutar "Update-Package Microsoft.Web.Infrastructure -Reinstall" en el proyecto, que actualizó toda la solución, pero no terminó ayudando en sí mismo. - Luego revisé las referencias de los proyectos y configuré la copia local en falso, y luego volví a verdadero. En realidad, esto resultó en una línea que se agregó al archivo CSPROJ con la referencia de DLL: True. O algo parecido ... De cualquier manera, ahora la compilación estaba copiando los archivos como se esperaba.

Jurijs Kastanovs
fuente
0

Entonces, esto es lo que funcionó para mí usando VS2019. Recibí este error al intentar actualizar los paquetes de Nuget en un proyecto mientras Microsoft.Web.Infrastructure estaba en un proyecto diferente en la misma solución. Tuve que eliminar la carpeta Microsoft.Web.Infrastructure.1.0.0.0 de la carpeta Paquetes de mi proyecto. Lo reinstalé a través de nuget y luego todo comenzó a funcionar nuevamente. Cosas locas.

Shane Cessna
fuente