2009-12-09 12 views
7

sto caricando un assieme in C# utilizzando riflessione:caricare dinamicamente montaggio e manualmente forzare percorso per arrivare assembly referenziati

riferimenti
Assembly = Assembly.Load([assembly_bytestream]); 

Complesso caricata altre due assiemi. Per la mia comprensione riflessione sarà caricare l'assembly principale e quindi cercare il GAC per le assemblee di riferimento, se non riesce a trovare lì, si può quindi incorparate un evento AssemblyResolve:

AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; 

Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) 
{ 
    if (args.Name.IndexOf([refAsm]) > -1) 
    { 
    Assembly shdocvw = Assembly.LoadFrom([dllPath]); 
    } 
} 

Il fatto è che io non voglio prima cerca nel GAC Voglio forzare la riflessione per caricare gli assiemi di riferimento da un percorso specifico che definisco. Qualche idea su come fare questo?

risposta

4

È possibile caricare autonomamente i gruppi dipendenti prima di caricare quello che li richiede.

+0

Hi Slaks Stai dicendo che il riflesso controllerebbe il flusso di memoria prima di controllare il GAC? –

+0

Se l'assembly è già caricato, non tenterà di caricarlo nuovamente. – SLaks

+0

Sembra abbastanza semplice. Ci proverò. Grazie –

8

Per la mia comprensione riflessione sarà caricare l'assembly principale e quindi cercare il GAC per le assemblee di riferimento

corretta, ma un altro dettaglio importante: il quadro sarà nel percorso di ricerca del dominio applicazione prima di guardare in il GAC. Normalmente il percorso di ricerca del dominio dell'app è costituito solo dalla directory in cui si trova l'EXE principale, sebbene sia possibile configurare l'app per cercare anche in sottodirectory specifiche, tramite app.config oppure avviando un secondo dominio dell'app e configurandolo a livello di programmazione.

Dove si trovano gli assembly referenziati relativi all'EXE della tua app?

Modifica: Mi riferisco sempre a Suzanne Cook's assembly load cheat sheet durante il debug di problemi come questo. Il resto del suo blog è pieno di informazioni altrettanto utili.

+0

Bene, si tratta di un'applicazione ClickOnce in modo che l'exe si trovi nella cache ClickOnce degli utenti nella cartella App. L'applicazione clickOnce chiama un servizio Web che trasmette un attrezzo (l'assembly in questione). Gli assembly di riferimento dell'assembly in questione si trovano nella cartella App. –

+0

Quindi qual è il percorso specifico in cui vuoi cercare? La posizione originale di ClickOnce? Se è così, questo dovrebbe già funzionare. Se non funziona, sarebbe utile vedere il log di fusione allegato all'eccezione generata dall'assenza del caricamento dell'assembly. –

+0

L'assembly viene caricato correttamente, ma viene caricato dal gac. Voglio specificare il percorso. –

Problemi correlati