2010-08-09 24 views

risposta

10

Assembly.Load è un riferimento dinamico poiché si sta caricando in modo dinamico una DLL esterna in fase di esecuzione. Prenderesti in considerazione un riferimento statico più come quando aggiungi un riferimento a un progetto .NET e costruisci il progetto con quel riferimento in atto.

EDIT:

Dal Doc MSDN:

I record del compilatore statico riferimenti nei metadati del manifesto dell'assembly a tempo di costruzione.

Hmmm, non sono sicuro di questo da solo. Terrò la mia risposta qui per ora, nella speranza di ottenere più commenti di correzione o vedere risposte migliori.

+0

Questo non è del tutto corretto, credo ... un riferimento dyanamic come indicato nel MSDN (http://msdn.microsoft.com/en-us/library/yx7xezcf (VS.71) .aspx) fa riferimento a riferimenti dinamici come caricare un riferimento con solo informazioni sufficienti che il runtime deve cercare l'assembly da caricare. Con riferimenti statici, la posizione degli assembly (GAC, application direcotry, ecc.) È nota e può essere ancora eseguita utilizzando Assembly.load. – Achilles

0

Un riferimento dyanamic come indicato nel MSDN (http://msdn.microsoft.com/en-us/library/yx7xezcf(VS.71).aspx) fa riferimento a riferimenti dinamici come caricamento di un riferimento con le informazioni sufficienti che il runtime deve cercare per il gruppo che viene caricato. Con riferimenti statici, la posizione degli assembly (GAC, application direcotry, ecc.) È nota e può essere ancora eseguita utilizzando Assembly.load.

2

In riferimento a:

Quali sono le implicazioni e suggerito scenari da utilizzare?

Di solito, se uso Assembly.Load(), è perché sto sviluppando un sistema collegabile. I riferimenti dinamici facilitano l'inclusione di assiemi che non sono necessariamente parte della mia build.

I tipi di istanziazione da un assieme caricato in modo dinamico richiedono almeno un po 'di riflessione. La quantità di riflessione necessaria può essere attenuata assicurando che i tipi caricati dinamicamente implementino un'interfaccia o una classe base nota (da un assieme caricato staticamente).

In breve, è molto lavoro utilizzare gli assembly caricati dinamicamente; tuttavia, fare ciò può rendere più flessibile un'applicazione, consentendo agli utenti di sviluppare plug-in. Basta valutare i compromessi della flessibilità prevista dei riferimenti dinamici (che potrebbe non essere un requisito) e il supporto in fase di progettazione di Visual Studio per riferimenti statici.

Una pratica degna di considerazione se la creazione di un'architettura plug-in è di caricare gli assiemi nei propri AppDomain. Ciò consente di avere un controllo più preciso delle autorizzazioni di sicurezza degli assembly di cui non ci si può fidare completamente e offre il vantaggio aggiuntivo che gli assembly possono essere scaricati in fase di esecuzione. Personalmente, ho trovato che lavorare con AppDomains richiede molto lavoro; tuttavia, se sono necessari i vantaggi, è bene sapere che gli AppDomain ci sono.

Problemi correlati