Was sind die Auswirkungen und vorgeschlagenen Szenarien zu verwenden?
Assembly.Load
ist eine dynamische Referenz, da Sie eine externe DLL zur Laufzeit dynamisch laden. Sie würden eine statische Referenz eher als wenn Sie einen Verweis auf ein .NET-Projekt hinzufügen und das Projekt mit dieser Referenz an Ort und Stelle erstellen.
BEARBEITEN:
Vom MSDN-Dokument:
Der Compiler zeichnet statische Referenzen auf in den Metadaten des Assembly-Manifests unter Bauzeit.
Hmmm, ich bin mir nicht sicher. Ich werde meine Antwort hier für jetzt behalten, in der Hoffnung, mehr Korrekturkommentare zu bekommen oder bessere Antworten zu sehen.
In Bezug auf:
Was sind die Auswirkungen und vorgeschlagene Szenarien, um entweder zu verwenden?
Normalerweise verwende ich Assembly.Load()
, weil ich ein Pluggable-System entwickle. Dynamische Referenzen erleichtern die Einbindung von Assemblys, die nicht unbedingt Teil meines Builds sind.
Das Instanziieren von Typen aus einer dynamisch geladenen Assembly erfordert mindestens eine gewisse Reflektion. Die Menge an erforderlicher Reflexion kann verringert werden, indem sichergestellt wird, dass dynamisch geladene Typen eine bekannte Schnittstelle oder Basisklasse (von einer statisch geladenen Baugruppe) implementieren.
Kurz gesagt, es ist eine Menge Arbeit, dynamisch geladene Baugruppen zu verwenden. Dies kann jedoch eine Anwendung flexibler machen, indem Benutzern das Entwickeln von Plug-Ins ermöglicht wird. Wichten Sie die Kompromisse zwischen der erwarteten Flexibilität dynamischer Referenzen (die nicht unbedingt erforderlich sind) und der Entwurfszeitunterstützung von Visual Studio für statische Referenzen ein.
Eine Praxis, die beim Erstellen einer Plug-in-Architektur berücksichtigt werden muss, ist das Laden von Assemblys in ihre eigenen Anwendungsdomänen. Auf diese Weise können Sie die Sicherheitsberechtigungen von Assemblys, auf die Sie möglicherweise nicht vollständig vertrauen, feinabgestimmter steuern und haben den zusätzlichen Vorteil, dass die Assemblys zur Laufzeit entladen werden können. Ich persönlich fand die Arbeit mit AppDomains arbeitsintensiv; Wenn die Vorteile jedoch erforderlich sind, ist es gut zu wissen, dass AppDomains vorhanden sind.
Eine Dyanamic-Referenz wie in den MSDN ( Ссылка ) Referenzen angegeben dynamisches Referenzieren als Laden einer Referenz mit nur genügend Informationen, dass die Laufzeitumgebung nach der zu ladenden Assembly suchen muss. Bei statischen Verweisen ist der Speicherort von Assemblys (GAC, Anwendungsdirektübertragung usw.) bekannt und kann weiterhin mithilfe von Assembly.load ausgeführt werden.
Tags und Links c# assembly-loading