2010-11-08 4 views
9

Sto avendo un problema molto spiacevole con la mia webapp.Il tipo C# non può essere convertito in tipo B (InvalidCastException) ... Context hell?

L'applicazione è stata progettata come segue:
- La radice App sta caricando un file SWF Flex, che a sua volta carica un 3rd party modulo Flex SWF in un'applicazione sub (MagickECB).
- Entrambe le applicazioni di riferimento Albums.dll, dll trovata in /bin e /MagickECB/bin e entrambe le applicazioni condividono lo stesso pool di applicazioni in IIS.

EDIT: Sono due progetti, il progetto dell'app root e il progetto subapp. Progetto dell'app root di riferimento del progetto Subapp.

Quando si carica il modulo flex il sub dell'applicazione dall'applicazione Flex dell'app radice, abbiamo casualmente otteniamo un errore di getto come segue:

C'è stato un errore ottenendo configurazione del Photobook: [A] Albums.LocalizationConfiguration non può essere trasmesso a [B] Album.LocalizzazioneConfigurazione. Tipo A proviene da 'album, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null ' nel contesto 'predefinito' nella posizione 'C: \ WINDOWS \ Microsoft.NET \ Framework \ v2 .0.50727 \ Temporary ASP.NET File \ magickecb \ 4414db97 \ 126f5aaf \ assembly \ dl3 \ cf281292 \ 4a6ecec8_8a7bcb01 \ Albums.DLL '. tipo B nasce dalla 'album, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null ' nel contesto 'LoadFrom' nella posizione 'C: \ WINDOWS \ Microsoft.NET \ Framework \ v2 .0.50727 \ Temporary ASP.NET File \ magickecb \ 4414db97 \ 126f5aaf \ assembly \ dl3 \ 017fab88 \ a91238d1_7977cb01 \ Albums.dll '. a Albums.LocalizationConfiguration.GetConfig() a Albums.CGlobal.GetUserLocale (String userHandle)

Cercando di approfondire la questione, ho scoperto il metodo GetConfig che causa l'errore getto restituito

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

la sezione nel web.config è dichiarata come segue: (EDIT: radice web.config dell'applicazione)

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

La mia ipotesi è che il codice interno di GetSection tenta di caricare Albums.dll nel contesto "LoadFrom" e quindi causare un conflitto con l'originale Albums.dll caricato nel percorso/bin (see context problematics)

I Si noti inoltre che altre DLL in/MagickECB/Bin fanno riferimento anche a Albums.dll, quindi ricostruisco tutti i progetti in modo che ogni DLL faccia riferimento alla stessa versione di Album.dll

scorso, se si seleziona il percorso completo dll nei file temporanei, le estensioni sono differenti (maiuscole vs minuscolo) ..

Qualsiasi input su come risolvere questo problema sarebbe molto apprezzato !!

risposta

10

doppio controllare i riferimenti, se si confrontano le vostre due sedi dll sono diversi (estensione maiuscolo vs minuscolo non è un problema):

file temporanei di ASP.NET \ magickecb \ 4414db97 \ 126f5aaf \ assembly \ DL3 \ cf281292 \ 4a6ecec8_8a7bcb01 \ Albums.DLL

File ASP.NET temporanei \ magickecb \ 4414db97 \ 126f5aaf \ assembly \ DL3 \ 017fab88 \ a91238d1_7977cb01 \ Albums.dll

probabilmente significa che sei facendo riferimento a due diversi affittare i file - magari riferendone uno come progetto e l'altro direttamente come file. Hai qualche avvertimento quando provi a creare la tua applicazione web per quanto riguarda i riferimenti?

MODIFICA: il file__AssemblyInfo__.ini nelle cartelle sopra ti darà il percorso da cui Albumssi era stato copiato.

+1

Nessun avviso durante la compilazione. Ho due progetti, il progetto dell'app root e il progetto subapp. Progetto dell'app root di riferimento per sottoapp. – Breakdown

+0

Stavo pensando ad Albums.dll: come si fa a far riferimento a entrambi i progetti? È questo il tuo progetto? – Mihailo

+0

Sì, entrambi sono i miei progetti. Faccio riferimento a Albums.dll (che è l'uscita del progetto root) nel sottoprogetto attraverso il riferimento del progetto. E 'quello che volevi sapere? (Nessun C/P nel cestino del sotto-app del progetto) – Breakdown

0

Senza una spiegazione per il problema, suggerirei di registrare l'assembly al GAC e utilizzarlo da lì.