2010-11-08 22 views
9

Tengo un problema muy desagradable con mi aplicación web.C# Tipo A no se puede convertir a Tipo B (InvalidCastException) ... ¿Contexto infierno?

La aplicación está diseñada de la siguiente manera:
- La raíz de la aplicación se carga un archivo SWF Flex, que a su vez carga una tercera parte del módulo Flex SWF en una aplicación secundaria (MagickECB).
- referencia tanto Aplicaciones Albums.dll, DLL encuentra en /bin y /MagickECB/bin y ambas aplicaciones comparten el mismo grupo de aplicaciones en IIS.

EDIT: Son dos proyectos, el proyecto de la aplicación raíz y el proyecto subapp. Proyecto de subaplicación proyecto de aplicación raíz de referencia.

Al cargar módulo de flexión de la aplicación secundaria desde la aplicación de la flexión de la aplicación de la raíz, obtenemos al azar un error de reparto como sigue:

Hubo conseguir un error configuración del álbum de fotos: [A] Albums.LocalizationConfiguration no se puede convertir a [B] Albums.LocalizationConfiguration. Tipo A se origina en 'álbumes, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null' en el contexto 'defecto' en la ubicación 'C: \ WINDOWS \ Microsoft.NET \ Framework \ v2 .0.50727 \ Temporal ASP.NET Archivos \ magickecb \ 4414db97 \ 126f5aaf \ assembly \ dl3 \ cf281292 \ 4a6ecec8_8a7bcb01 \ Albums.DLL '. tipo B se origina de 'Album, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null' en el contexto 'LoadFrom' en la ubicación 'C: \ WINDOWS \ Microsoft.NET \ Framework \ v2 .0.50727 \ Temporal ASP.NET Archivos \ magickecb \ 4414db97 \ 126f5aaf \ assembly \ dl3 \ 017fab88 \ a91238d1_7977cb01 \ Albums.dll '. en Albums.LocalizationConfiguration.GetConfig() en Albums.CGlobal.GetUserLocale (String userHandle)

Tratando de investigar este asunto, descubrí el método GetConfig causando devolvió el error fundido

return (LocalizationConfiguration)ConfigurationManager.GetSection("Localization/Localization"); 

la sección en el Web.config se declara de la siguiente manera: (EDITAR: raíz web.config de la aplicación)

<sectionGroup name="Localization"> 
    <section name="Localization" type="Albums.LocalizationConfigurationHandler, Albums"/> 
</sectionGroup> 

Mi conjetura sería que el código interno de GetSection intenta cargar Albums.dll en el contexto "LoadFrom" y por lo tanto causar un conflicto con el Albums.dll original cargado en la ruta/bin (see context problematics)

I También tenga en cuenta que otros dlls en/MagickECB/Bin también hacen referencia a Albums.dll, por lo que reconstruyo todos los proyectos para que cada DLL haga referencia a la misma versión de Álbumes.DLL

pasado, si se comprueba la ruta completa DLL en los archivos temporales, las extensiones son diferentes (en mayúsculas vs minúsculas) ..

Cualquier opinión sobre la manera de resolver este problema sería muy apreciada !!

Respuesta

10

Compruebe sus referencias, si se comparan los dos lugares que son diferentes del DLL (mayúsculas extensión vs minúsculas no es un problema):

Temporary ASP.NET Files \ magickecb \ 4414db97 \ 126f5aaf \ assembly \ dl3 \ cf281292 \ 4a6ecec8_8a7bcb01 \ Albums.DLL

Temporary ASP.NET Files \ magickecb \ 4414db97 \ 126f5aaf \ assembly \ dl3 \ 017fab88 \ a91238d1_7977cb01 \ Albums.dll

Probablemente significa que eres haciendo referencia a dos diferencias alquilar archivos - tal vez haciendo referencia a uno como proyecto y el otro directamente como un archivo. ¿Tiene alguna advertencia cuando intente construir su aplicación web con respecto a las referencias?

EDIT:__AssemblyInfo__.ini El archivo en las carpetas anteriores le dará la ruta desde la que se ha copiado Albums.dll.

+1

Sin aviso durante el tiempo de compilación. Tengo dos proyectos, el proyecto de la aplicación raíz y el proyecto subapp. Proyecto de aplicación raíz de referencia de Subapp. – Breakdown

+0

Estaba pensando en Albums.dll. ¿Cómo se hace referencia en ambos proyectos? ¿Es ese tu proyecto? – Mihailo

+0

Sí, ambos son mis proyectos. Hago referencia a Albums.dll (que es la salida del proyecto raíz) en el proyecto secundario a través de la referencia del proyecto. ¿Es eso lo que querías saber? (Sin C/P en el contenedor del proyecto de la aplicación secundaria) – Breakdown

0

Sin tener una explicación para su problema, le sugiero que registre el ensamblaje en el GAC y lo use desde allí.

Cuestiones relacionadas