AppDomain: Rekursives Laden von Assemblys und Abhängigkeitsverwaltung
Das Laden von Assemblys und ihren Abhängigkeiten in eine neue AppDomain kann schwierig sein. Bei Anfängern entsteht das häufige FileNotFoundException
oft durch fehlende Abhängigkeiten.
Das Problem verstehen
Ein wichtiger Punkt, den Sie beachten sollten, ist, dass beim Laden einer Assembly in eine AppDomain die referenzierten Assemblys nicht automatisch geladen werden. Dies erfordert rekursives Laden, um sicherzustellen, dass alle Abhängigkeiten verfügbar sind. Andernfalls kommt es zu Fehlern wie:
„Die Datei oder Assembly „MyDll, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null“ oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Das System kann die angegebene Datei nicht finden.“
Dieser Fehler weist eindeutig auf die Notwendigkeit eines rekursiven Ladens von Abhängigkeiten hin.
Abhängigkeiten manuell beheben
Ein häufiger Versuch besteht darin, die Referenzen der Root-Assembly zu durchlaufen und sie einzeln zu laden. Dies führt jedoch häufig zu wiederholten FileNotFoundException
Fehlern für die eigenen Abhängigkeiten der referenzierten Assemblys.
Der entscheidende Schritt: CreateInstanceAndUnwrap
Die Lösung liegt in der Verwendung von CreateInstanceAndUnwrap
, bevor das Proxy-Objekt innerhalb der Ziel-AppDomain ausgeführt wird. Dadurch wird sichergestellt, dass der Proxy innerhalb seiner zugewiesenen AppDomain ordnungsgemäß ausgeführt wird.
LoadFile
vs. LoadFrom
Die Verwendung von LoadFrom
kann zu Problemen führen, da das GAC oder der bin-Ordner der Anwendung durchsucht wird. Um dies zu vermeiden, verwenden Sie LoadFile
. Denken Sie daran, dass Sie weiterhin selbst für das rekursive Laden von Abhängigkeiten verantwortlich sind.
Zusammenfassung
Das erfolgreiche Laden einer Assembly und ihrer Abhängigkeiten in eine AppDomain erfordert sorgfältiges, rekursives Laden von Abhängigkeiten. Wenn Sie CreateInstanceAndUnwrap
verwenden und sich für LoadFile
anstelle von LoadFrom
entscheiden, können Sie referenzierte Baugruppen effektiv verwalten.
Das obige ist der detaillierte Inhalt vonWie lade ich Assemblys und ihre Abhängigkeiten rekursiv in eine AppDomain?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!