2009-05-20 4 views
2

Ist es besser, System.Assembly.Load zu verwenden oder die Assembly direkt in die AppDomain zu laden, indem Sie System.AppDomain.CurrentDomain.CreateInstanceFromAndUnwrap verwenden? Ich bin speziell daran interessiert, verschiedene Versionen derselben Baugruppe im selben Prozess aufzurufen. Ich denke mit CreateInstanceFromAndUnwrap muss Ihre Assembly das Attribut [serializable] haben, aber warum ist das so?Laden verschiedener Assembly-Versionen dynamisch in .NET

BEARBEITEN: Die Assembly, die ich laden möchte, befindet sich NICHT am selben Ort wie der Anrufer.

Antwort

0

Nicht an der gleichen Stelle, ich vermute, Sie meinen, anderswo auf dem Dateisystem, lass es mich wissen, wenn nicht.

Es ist besser, System.Assembly.Load zu verwenden, da es sich um den allgemeinen Low-Level-Assemblyloader handelt.

Auch erwähnen Sie wollen verschiedene Versionen laden. Dazu müssen Sie sekundäre AppDomain einrichten, in die die Assembly geladen werden soll. Anschließend müssen Sie die AppDomain entfernen und eine neue AppDomain für die neue Assemblyversion erstellen, da .Net das Laden einer Assembly aus einem gegebenen Assembly nicht unterstützt Anwendungsdomäne

Die CreateInstanceFromAndUnwrap ist zum Laden von Code, der irgendwie an Sie "gesendet" wurde, daher müssen die Dinge, die es bearbeitet, serialisierbar sein.

+0

Wenn Ihre Assemblys die Versionsnummer im Namen behalten, müssen Sie * den vorherigen nicht * entladen *. Je nach Anzahl der geladenen Assemblys würde die RAM-Auslastung jedoch proportional steigen ... – user79755

+0

I Ich dachte, du könntest zwei Versionen derselben Baugruppe in derselben Appdomain laden ... Ich sage nicht, dass ich jemals die Notwendigkeit hatte, es zu versuchen. – JasonRShaver

+0

Nach [diesem Beitrag] (http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/ff1a1d47-c3b8-422f-a373-6fe4b90e36d8), "... sollten Sie in der Lage sein um zwei verschiedene Versionen derselben Assembly in dieselbe AppDomain zu laden, ** wenn die Assembly einen starken Namen hat ** (Name, Version, Kultur und öffentlicher Schlüssel). " Nicht gerade starre Dokumentation. – bacar