Was sind die Auswirkungen und vorgeschlagenen Szenarien zu verwenden?Verwendet Assembly.Load eine statische Referenz oder dynamische Referenz?
Antwort
Assembly.Load
ist eine dynamische Referenz, da Sie eine externe DLL zur Laufzeit dynamisch laden. Sie würden eine statische Referenz eher so sehen, als würden Sie einen Verweis auf ein .NET-Projekt hinzufügen und das Projekt mit dieser Referenz erstellen.
EDIT:
Aus der MSDN-Doc:
Der Compiler Aufzeichnungen statische Referenzen in den Metadaten der Assembly-Manifest an Bauzeit.
Hmmm, ich bin mir nicht sicher. Ich behalte meine Antwort hier für jetzt, in der Hoffnung, mehr Korrekturkommentare zu bekommen oder bessere Antworten zu sehen.
Eine Dyanamic-Referenz, wie in der MSDN (http://msdn.microsoft.com/en-us/library/yx7xezcf(VS.71).aspx) angegeben, verweist auf dynamisches Referenzieren als Laden einer Referenz mit nur genügend Informationen, dass die Laufzeitumgebung nach der geladenen Assembly suchen muss. Mit statischen Verweisen ist der Speicherort von Assemblys (GAC, Anwendungsdirektübertragung usw.) bekannt und kann weiterhin mithilfe von Assembly.load ausgeführt werden.
In Bezug auf:
Was die Auswirkungen sind und Szenarien vorgeschlagen entweder zu benutzen?
Normalerweise, wenn ich Assembly.Load()
verwende, ist es, weil ich ein steckbares System entwickle. Dynamische Referenzen erleichtern die Einbindung von Baugruppen, die nicht unbedingt Teil meines Builds sind.
Das Instanziieren von Typen aus einer dynamisch geladenen Baugruppe erfordert mindestens eine gewisse Reflektion. Die Menge an erforderlicher Reflexion kann gemildert 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.
Beim Erstellen einer Plug-in-Architektur ist es sinnvoll, Assemblys in ihren eigenen Anwendungsdomänen zu laden. 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.
Dies ist nicht ganz richtig, ich glaube ... eine Dyanamic-Referenz wie in der MSDN (http://msdn.microsoft.com/en-us/library/yx7xezcf (VS.71) .aspx) verweist auf dynamische Referenzierung B. eine Referenz laden, die nur genügend Informationen enthält, dass die Laufzeitumgebung nach der geladenen Assembly suchen muss. Mit statischen Verweisen ist der Speicherort von Assemblys (GAC, Anwendungsdirektübertragung usw.) bekannt und kann weiterhin mithilfe von Assembly.load ausgeführt werden. – Achilles