Laden...

[gelöst] .Netz gepackte EXE: dll dynamisch laden

Erstellt von andrgrau vor 14 Jahren Letzter Beitrag vor 14 Jahren 3.365 Views
A
andrgrau Themenstarter:in
22 Beiträge seit 2009
vor 14 Jahren
[gelöst] .Netz gepackte EXE: dll dynamisch laden

Hallo zusammen,

ein neuer Beitrag in Bezug auf ein anderes Thema von mir (Entwurf eines eigenen Frameworks).
Ich habe eine EXE und ein paar DLL Dateien, die mit dem Tool .Netz zu einer EXE gepackt werden. Die EXE weiß nicht, ob und wie viele DLL Dateien vorhanden sind, da es sich bei den DLLs um Module/Plugins handelt.

Zum Testen ohne .Netz durchsuche ich einfach im im gleichen Ordner der EXE, ob DLL Dateien vorhanden sind, lade diese (Assembly.LoadFrom), überprüfe auf ein Interface (stellt sicher, dass es eine korrektes Plugin ist) und wenn das passt, dann erstelle ich mir eine Instanz und kann das Plugin laden.
Das funktioniert wunderbar, ich suche nun eben noch nach einer Möglichkeit, das gleiche zu machen, wenn die DLL Dateien mit .Netz gepackt wurden.

mfg

1.457 Beiträge seit 2004
vor 14 Jahren

Hallo andrgrau,

Ich bin der Meinung das dies mit .Netz nicht funktionieren wird. Am besten du setzt dich mit dem Entwickler in Verbindung und schaust auch mal auf diese Seite http://madebits.com/netz/limits.php.

4.942 Beiträge seit 2008
vor 14 Jahren

Scheint doch zu gehen (Compiler-Option: -d), s. "Packing Dynamically Loaded Assemblies" auf der Usage-Seite: http://madebits.com/netz/help.php

Edit: wenn du jedoch die Namen der Dateien nicht kennst, dann evtl. doch nicht
(außer du numerierst sie z,B. lib_1, lib_2, etc.).

F
10.010 Beiträge seit 2004
vor 14 Jahren

Gibt auf Codeproject ( wie immer ) ein Lib zu Netz, wo Marc Cliffton
http://www.codeproject.com/KB/cs/NetzDynamicAssemblies.aspx

A
andrgrau Themenstarter:in
22 Beiträge seit 2009
vor 14 Jahren

Gibt auf Codeproject ( wie immer ) ein Lib zu Netz, wo Marc Cliffton

Den Artikel habe ich auch schon gelesen, bin auch dabei Teile davon umzusetzen in Verbindung mit dem Code von .Netz selber, den ich per Reflector mir angeschaut habe.
Korrigier mich, wenn ich falsch liege, aber das von ihm bereitgestellte Code liefert mir ja nicht alle Assemblies, die durch .Netz mir verpackt wurden, oder?

Momentan versuche ich es folgendermaßen: (Bzw. heute wahrscheinilch nicht mehr)
Wie Marc Cliffton überprüfe ich, ob die Applikation vom .Netz Loader gestartet wurde, dann hole ich mir mit Assembly.GetEntryAssembly().GetManifestResourceStream("app.resources") den Stream für die Resources. Übergebe den Stream einem ResourceReader und somit kann ich auf die Resourcen zugreifen bzw. durchlaufen. Dort stehen dann alle meine Resourcen drin (inkl. der Tests), lass mir vom NetzStarter die eigentliche Assembly zurückgeben und überprüfe die dann eben wie normale DLL Dateien.

F
10.010 Beiträge seit 2004
vor 14 Jahren

Jupp, genauso.

Wenn Du fertig bist, ich könnte das auch gebrauchen 😉

A
andrgrau Themenstarter:in
22 Beiträge seit 2009
vor 14 Jahren

Wenn Du fertig bist, ich könnte das auch gebrauchen 😉

Bis Montag sollte es fertig sein, ich werds dann auch in die Snippets posten 😉

A
andrgrau Themenstarter:in
22 Beiträge seit 2009
vor 14 Jahren

So, meine Lösung habe ich nun in den Snippets gepostet: .Netz gepackte DLLs dynamisch laden - wie "Plugins"

Somit ist dieses Thema für mich gelöst 😉