2011-01-20 24 views
22

He intentado implementar una aplicación MVC3 en nuestro entorno de alojamiento IIS7 pero estoy siendo presentado satisfechas con la siguiente excepción:MVC3 despliegue Dependencia Problemas

No se pudo cargar el tipo 'Microsoft.Web.Infrastructure. DynamicModuleHelper.DynamicModuleUtility ' desde el ensamblado ' Microsoft.Web.Infrastructure, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 '. Descripción: Ocurrió 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 acerca del error y dónde se originó en el código.

Detalles de excepciones: System.TypeLoadException: No se pudo tipo de carga 'Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility' del conjunto 'Microsoft.Web.Infrastructure, Version = 1.0.0.0, Culture = neutral , PublicKeyToken = 31bf3856ad364e35 '.

¿Alguna sugerencia?

La aplicación no se está implementando en un contenedor ya que he instalado páginas web ASP.Net y MVC3 en el servidor web.

+2

Mira en http://stackoverflow.com/questions/4723646/asp-net-mvc-3-which-dlls-need-to-be-deployed/4723778#4723778 – Omar

+0

Para que quede claro, no estoy bin implementando esta aplicación: ya tengo MVC3 instalado en el servidor. –

+0

¿Qué otras formas existen para implementar una aplicación? –

Respuesta

45

Esto es porque Microsoft.Web.Infrastructure no está en su GAC. Necesita agregar esta referencia a su proyecto. Haga clic con el botón derecho en la referencia y vaya a propiedades, luego configure copy to local en true.

Copy Local

salida (No haga caso de la Ninject y UCN):

alt text

+0

He comprobado C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ Microsoft.Web.Infrastructure \ v4.0_1.0.0.0__31bf3856ad364e35 y la DLL definitivamente está ahí. No tengo esta dependencia en mi proyecto tal como está. –

+0

También puede tener que hacer referencia a un montón de otras cosas también. Cosas como Razor, System.Webpages, etc. No estará en su proyecto, pero puede referenciarlo agregando desde los ensamblajes de framework. –

+0

¿No debería estar incluido en la DLL de System.Web.MVC? –

1

Asegúrese de que el archivo raíz web.config en el servidor (que se encuentra en algún lugar como aquí: C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config) tiene la siguiente entrada:

<configuration> 
    <location allowOverride="true"> 
    <system.web> 
     <fullTrustAssemblies> 
     <add 
      assemblyName="Microsoft.Web.Infrastructure" 
      version="1.0.0.0" 
      publicKey="[bunch of letters and numbers]" 
     /> 

Si falta, significa que alguien se metió con su .NET 4 instalación.

+3

Ese 'publicKey' parece aterrador. – Omar

+0

Lo simplifiqué :) El punto es que MVC 3 y WebPages requiere que la entrada esté allí para que Microsoft.Web.Infraestructura funcione. – marcind

+0

Sí. Lo encontré y se ve bien. –

4

Microsoft.Web.Infrastructure es ahora un paquete Nuget, y se puede añadir a su proyecto para permitir implementaciones de directorio bin -

http://nuget.org/packages/Microsoft.Web.Infrastructure

+2

Tengo el paquete instalado en mi proyecto, pero el proyecto no hace referencia a la DLL. Supongo que una aplicación excesiva de ReSharper "eliminar referencias no utilizadas" puede haber eliminado más de lo que debería ... – Zarepheth

6

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

entonces eliminado la línea de código en el archivo packages.config

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

y corrió de nuevo el comando

PM> Install-Package Microsoft.Web.Infrastructure 

Después de esto, ahora funciona bien.

+3

Incluso si un paquete está instalado, puede forzar la reinstalación en lugar de hacer lo que ha hecho mediante el comando: Paquete de actualización Microsoft.Web.Infrastructure -Reinstall –