2012-04-03 109 views
19

He consultado preguntas similares en SO, pero no hay nada que coincida con mi problema hasta donde yo sé.No se pudo cargar el archivo o el ensamblado CrystalDecisions.ReportAppServer.ClientDoc

El mensaje de excepción:

No se pudo cargar el archivo o ensamblado 'CrystalDecisions.ReportAppServer.ClientDoc, Version = 13.0.2000.0, Culture = neutral, PublicKeyToken = 692fbea5521e1304' o uno de sus dependencias. El sistema no puede encontrar el archivo especificado.

El archivo está en mi GAC. Estoy desarrollando una máquina de 32 bits (Windows 7) con VS2010, todo es .NET4. La máquina de alojamiento de destino es Win 2008 R2 de 64 bits. Mi máquina local tiene la instalación CR para VS2010; la máquina de alojamiento tiene los tiempos de ejecución de 64 bits para VS2010. Estoy compilando todo mi código en el modo "Cualquier CPU" para esta aplicación web.

Me sorprende que no pueda encontrar el archivo en el GAC. Esta es una aplicación de IIS; ¿Hay algún tipo de problema de permisos? Yo pensaría que IIS tendría acceso al GAC.

Se agradecerán algunas sugerencias de qué hacer.

+0

En varias dlls de terceros con las que he trabajado, PublicKeyToken es diferente para las versiones de 32 bits y 64 bits. Si funciona en una máquina, pero no en la otra, podría ser un lugar para mirar. es solo una suposición, sin embargo ... – David

+0

Bueno, el archivo con ese token de clave pública existe en el GAC, exactamente como se describe. No entiendo por qué mi aplicación web no puede encontrarlo. –

Respuesta

14

Resulta que la respuesta era ridículamente simple, pero desconcertante de por qué era necesario.

En el Administrador de IIS en el servidor, configuré el grupo de aplicaciones para que mi aplicación web no permita ensamblajes de 32 bits.

Parece que asume, en un sistema de 64 bits, que debe querer el ensamblaje de 32 bits. Extraño.

+0

O, como alternativa: C: \ inetpub \ AdminScripts \ adsutil.vbs SET w3svc/AppPools/Enable32bitAppOnWin64 0 – ariscris

+0

Mi caso era una aplicación WPF. Tuve que deshabilitar la opción "Preferencia de 32 bits" en las preferencias del proyecto. – RonaldPaguay

3

1) cambiar su perfil de .NET desde el perfil de cliente al que Net Framework 4,0 http://msdn.microsoft.com/en-us/library/bb398202.aspx

2) Comprobar las Tipos de interoperabilidad Insertar flag

Embed Interop Types flag http://weblogs.asp.net/cazzu/archive/2011/03/11/check-your-embed-interop-types-flag-when-doing-visual-studio-extensibility-work.aspx

+0

Todos mis proyectos ya usan el perfil 4.0; Nunca he tenido mucho éxito con el perfil del cliente (no sé por qué es un valor predeterminado para cualquier proyecto). Comprobaré la configuración de Interop mañana por la mañana. –

+0

Todas mis referencias ya están configuradas para no incrustar tipos de interoperabilidad. –

+0

ah, lo siento, vale la pena intentarlo –

2

En cuanto al sistema de 64 bits que necesita soporte de 32 bits. No me parece tan extraño:

Aunque se implementó en un sistema de 64 bits, esto no significa que todos los ensamblados a los que se hace referencia sean necesariamente ensamblados de Crystal Reports de 64 bits. Además de eso, los ensamblados de Crystal Reports son en gran medida solo envoltorios de una colección de archivos DLL heredados en los que se basan. El ensamblado al que se hace referencia principalmente requiere muchas DLL de 32 bits. El mensaje de error "no se puede cargar el ensamblado" también involucra estos archivos DLL. Para ver visualmente cuáles son, vaya a www.dependencywalker.com y ejecute 'Depends' en el ensamble en cuestión, directamente en ese servidor IIS.

2

Simplemente necesita instalar Crystal Report Report Run Time descargas en Deployment Server. Si el problema aún aparece, coloque la carpeta asp_client en la carpeta principal del proyecto.

+0

Debería funcionar sin tener que instalar el tiempo de ejecución. ¿Cuál es la solución al ejecutar su sitio web en el servidor de la nube y no tiene acceso al escritorio? ¿Qué hay de las pruebas unitarias? –

Cuestiones relacionadas