2010-02-15 17 views
20

Sto cercando suggerimenti/suggerimenti/approfondimenti per aiutare a eseguire il debug di un problema di caricamento dell'applicazione; Impossibile caricare il file o il gruppo ...Suggerimenti per facilitare il debug "Impossibile caricare il file o l'assembly X o una delle sue dipendenze"

La soluzione/progetto in cui si verifica questo problema è una conversione da una copia di lavoro in Visual Studio 2008 al candidato alla versione di Visual Studio 2010. Il processo di conversione è sembrato avere successo e tutti i progetti della soluzione sono impostati su Framework 4.

L'eccezione è su un componente di terze parti (una libreria di elaborazione grafica), ma eventuali risposte potrebbero aiutare gli altri con qualsiasi DLL problematica.

Impossibile caricare il file o l'assembly 'Aurigma.GraphicsMill.DLL' o una delle sue dipendenze. non è una applicazione valida per win32. (Eccezione da HRESULT: 0x800700C1)

Cosa c'è confusione su questa eccezione è il testo aggiuntivo: non è un'applicazione di Win32 valida.

La piena stack eccezione è su PasteBin, ma non sembra far molta più luce sulla questione ...

Quello che ho provato finora senza successo:

  1. Semplice pulizia, ricostruzione, riavvio combinazioni di Visual Studio 2010 RC.
  2. Rimozione e riaggiunta della DLL in questione.
  3. Commutazione di "copia locale" su true e false sulla DLL in questione.
  4. Confermando che dopo una "build di successo" la DLL in questione appare nella cartella bin \ debug.
  5. Controllo di eventuali riferimenti non necessari alla DLL in questione (nessuno trovato).
  6. Il file di licenza associato per la DLL in questione è nella stessa directory con esso.

Non ho avuto fortuna con il rilevamento di eventuali punti di interruzione del debugger sul carico dell'applicazione.

risposta

6

ho avuto un'eccezione simile quando il mio progetto eseguibile è stato impostato su qualsiasi CPU e aveva un riferimento ad una dll compilato con x86.

provare a impostare l'eseguibile per x86 e vedere se funziona. Se non cerca fusion log per ottenere ulteriori dettagli sull'errore.

+0

Grazie, la piattaforma di destinazione non ha aiutato, né ha fatto il log di fusione, per un motivo sconosciuto non mi piace segnalare il problema di caricamento, stava segnalando altri problemi quando lasciato in esecuzione ... –

6

Tip

Un'indagine viale che abbiamo intrapreso, che risolto parte dei nostri problemi, ma non il problema generale è stato un mix di x86 (32-bit) e x64 (64-bit) assemblee riferimento a vicenda .

Verificare che non disporre di assiemi a 32 bit in base/riferimento a 64 gruppi di bit.

30

ho trovato la causa di questo problema da che perché si sono passati a.net v4, ora stai utilizzando un nuovo pool di applicazioni in IIS7 in modo specifico per asp.net v4 (il pool stesso è chiamato 'ASP.NET v4.0')

Nella sezione delle impostazioni avanzate del pool di applicazioni, impostare ' Abilita le applicazioni a 32 bit su true e la DLL del problema verrà caricata come previsto.

Ovviamente si dovrebbe fare lo stesso se l'applicazione Web ha il proprio pool di applicazioni.

Se si utilizza Windows Server 2008 (non R2) vedere this post on how to assign correct permissions for your application pool identity

0

Modifica sezione delle impostazioni avanzate del pool di applicazioni -> set 'abilitare le applicazioni a 32 bit' true risolto il mio problema.

2

La cosa strana è che mi trovavo di fronte allo stesso problema e ho inserito "false" nelle applicazioni a 32 bit consentite nelle impostazioni avanzate del pool di app, quindi ha funzionato!

3

Ciò è dovuto al fatto che si sta tentando di caricare una dipendenza binaria (uno dei file nella cartella Bin) a 32 bit e l'applicazione è in esecuzione in modalità 64 bit.

In .Net 4 e IIS 7 i pool di applicazioni sono impostati per l'esecuzione in modalità 64 bit.

La maggior parte dei file binari .Net sono compilati con Any CPU impostato nelle proprietà di creazione. Ciò significa che funzionano in modalità 32 e 64 bit.

La maggior parte delle applicazioni C++ e C scritte in .Net do richiedono una compilazione specifica per 32 o 64 bit. Ciò significa che se si utilizza la versione bin distribuita della dipendenza non può essere caricata.

questo può essere risolto utilizzando una delle seguenti operazioni:

se si desidera mantenere il vostro riferimento 32bit/dipendenza:

  1. specificamente previsto l'applicazione IIS per l'esecuzione in modalità a 32 bit.
    • In Gestione IIS;
    • Pool di applicazioni -> Impostazioni avanzate (a destra)
    • "Applicazioni a 32 bit" impostate su Vero.
    • Riavviare il pool di applicazioni
  2. Installare entrambe le assemblee (32bit e 64bit) nel GAC. IIS caricherà la versione corretta in base all'ambiente operativo (nel tuo caso questa sembra essere quella a 64 bit).

Se si desidera solo per farlo funzionare:

  1. Sostituire yout binario a 32 bit nella cartella Bin con la 64bit uno. IIS non avrà problemi a caricarlo.
0

Verificare se la DLL è stata bloccata. Fare clic con il tasto destro del mouse su Dll> Proprietà> Unblocco.

Problemi correlati