Ich schreibe ein Tool, um Informationen über .NET-Anwendungen zu berichten, die in Umgebungen und Regionen innerhalb der Systeme meines Kunden bereitgestellt werden.Wie wird eine .NET-Assembly für Reflektionsoperationen geladen und anschließend entladen?
Ich möchte die Werte der Assembly-Attribute in diesen Baugruppen lesen.
Dies kann mit Assembly.ReflectionOnlyLoad
erreicht werden, aber auch diese Vorgehensweise hält die Baugruppe geladen. Das Problem hier ist, dass ich nicht zwei Assemblys laden kann, die den gleichen Namen von verschiedenen Pfaden haben, also kann ich natürlich nicht dieselbe Anwendung vergleichen, die in verschiedenen Systemen bereitgestellt wird.
An dieser Stelle gehe ich davon aus, dass die Lösung temporäre AppDomain
s verwenden wird.
Kann jemand Detail, wie man eine Versammlung in eine andere AppDomain
lädt, die Attribute von ihm liest und die AppDomain
dann auslädt?
Dies muss sowohl für Assemblys im Dateisystem als auch für URL-Adressen funktionieren.
Danke, das wie ein nützliches Muster aussieht. –
Wird die Assembly in Assembly.RefrectionOnlyLoad (...) immer noch in der aktuellen Domäne und nicht in der temporärenAppDomain geladen? – Anzurio
AZ: Nein. AppDomain.DoCallback "speichert den Code in einer anderen Anwendungsdomäne, die vom angegebenen Delegaten identifiziert wird" (MSDN). Die Dokumentation von Assembly.ReflectionOnlyLoad gibt eindeutig an, dass "die Assembly in den reflection-only-Kontext der Anwendungsdomäne des Aufrufers geladen wird" (wiederum MSDN). Das bedeutet, dass die Assembly tatsächlich in die temporäre App-Domäne geladen wird. –