[CSharp.net] Assembly.LoadFile und Abhäng i gkeiten

Helge Lenuweit csharp.net at glengamoi.com
Wed, 10 Nov 2004 10:01:59 +0100


Habs jetzt doch gefunden... Man erweitert den Suchhorizont der aktuellen 
AppDomain durch

AppDomain.CurrentDomain.AppendPrivatePath("PluginDir") ;

um den Unterordner des Ausführungsverzeichnisses, der "einbezogen" 
werden soll (d.h. Ladeanforderungen an Assemblies können auch in diesem 
Ordner aufgelöst werden). Alternativ ist auch ein Eintrag in das 
<probing>-Element in der *.exe.config-Datei möglich.

Gruß, Helge

Christoph Wille wrote:

> Ich müßte rumgraben gehen, aber in #develop machen wir es selber, und 
> da geht es.
>
> Chris
>
> At 09:17 PM 11/9/2004, you wrote:
>
>> Hi Christoph,
>>
>> danke für den Hinweis, leider habe ich aber immer noch keine 
>> Lösung... Hast Du evtl. ein Beispiel oder noch eine Idee? Ich habe 
>> noch einige Forschungen angestellt und weiß inzwischen, daß 
>> Assembly.LoadFile die zu ladende Assembly in die ausführende 
>> AppDomain lädt. Zur Lösung erzeugt man sich wohl eine neue Appdomain, 
>> setzt die Basispfade über das AppdomainSetup-Objekt auf den Plugin- 
>> und den Ausführungsordner und erzeugt die Objekte der fremden 
>> Assembly in der neuen AppDomain. Leider wird dafür intern wohl die 
>> Remoting-Infrastruktur hergenommen, und folgerichtig kommen dabei 
>> merkwürdige "Klasse ist nicht als serialisierbar markiert"-Fehler. 
>> Bei meinen eigenen Klassen kann ich für [Serializable] sorgen, aber 
>> darüberhinaus?
>>
>> Gruß, Helge
>>
>> Christoph Wille wrote:
>>
>>> Es gibt einen Weg den Assembly Locator Mechanismus zu überschreiben.
>>>
>>> Chris
>>>
>>> At 08:07 AM 11/9/2004, you wrote:
>>>
>>>> ich habe ein Problem mit dem Laden von DLLs als Plugins, bzw. deren 
>>>> Abhängigkeiten. In einem definierten Unterordner meiner Anwendung 
>>>> liegen Plugin-DLLs nach einem bestimmten Namensschema, die ich zum 
>>>> Start per Assembly.LoadFile und, sofern erfolgreich, 
>>>> Activator.CreateInstance zum Einsatz bringe. Soweit, sogut, aber 
>>>> zwei von den Dingern haben externe Abhängigkeiten, und dort 
>>>> scheitert das Laden - der Plugin-Ordner wird nicht durchsucht. Lege 
>>>> ich die referenzierte Library aber in den Ausführungsordner meines 
>>>> Ursprungsprogramms statt meines Plugins, funktioniert es 
>>>> (natürlich). Gibt es eine programmatische Lösung für dieses Problem 
>>>> (außer GAC-registrieren...)?
>>>
>
>
> _______________________________________________
> CSharp.net Mailingliste, Postings senden an:
> CSharp.net@glengamoi.com
> An-/Abmeldung und Suchfunktion unter:
> http://www.glengamoi.com/mailman/listinfo/csharp.net
>
>