Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo zusammen,

ich bin gerade dabei mir eine Anwendung zu erstellen die eien Plugin unterstüzung hat. Dazu lade ich zur laufzeit mit Assembly.LoadFrom die dll in der das zu ladende plugin steht.

Leider führt das benutzen von Assembly.LoadFrom dazu das die geladene dll blockiert wird. gibt es eine Möglichkiet dieses Problem zu umgehen? Bzw. die dll sozusagen wieder zu entladen .

Grüße

Wolf

Geschrieben

Assembly.LoadFrom-Methode (String) (System.Reflection)

Die LoadFrom-Methode weist folgende Nachteile auf. Verwenden Sie stattdessen Load.

- Wenn bereits eine Assembly mit der gleichen Identität geladen wurde, gibt LoadFrom die geladene Assembly auch dann zurück, wenn ein anderer Pfad angegeben wurde.

- Wenn eine Assembly mit LoadFrom geladen wird und später eine Assembly im Ladekontext versucht, diese Assembly über den Anzeigenamen zu laden, tritt beim Laden ein Fehler auf. Dies kann beim Deserialisieren einer Assembly der Fall sein.

- Wenn eine Assembly mit LoadFrom geladen wird und der Prüfpfad eine Assembly mit gleicher Identität, aber anderem Speicherort enthält, kann eine InvalidCastException oder eine MissingMethodException ausgelöst werden, oder es kann ein anderes unerwartetes Verhalten eintreten.

-Für LoadFrom ist Read und F:System.Security.Permissions.FileIOPermissionAccess.PathDiscovery oder WebPermission für den angegebenen Pfad erforderlich.

- Wenn ein systemeigenes Bild für assemblyFile vorhanden ist, wird es nicht verwendet. Die Assembly kann nicht domänenneutral geladen werden.

- In .NET Framework, Version 1.0 und 1.1, wird die Richtlinie nicht angewendet.

Geschrieben

Mal so gefragt: Mit blockiert meinst du, die Datei ist geöffnet? Was spricht dagegen, du kannst sie sowieso nicht zur Laufzeit tauschen da sie in der Regel in die gleiche AppDomain geladen wird.

Ansonsten guck dir System.Addin von .NET 3.5 an, da kannst du dir viel Arbeit sparen.

Geschrieben

Hallo Leute hat sich erledigt.

erst mal thx an alle

und @tdm thx das war der denkanstoß der mir gefehlt hat

hier die lösung


byte[] assembly = File.ReadAllBytes(FileName);

Assembly modulAssembly = Assembly.Load(assembly);

Jetzt kann ich zur laufzeit dll's entfernen ohne das probleme auftretten.

  • 10 Monate später...
Geschrieben

Danke, ihr seid meine Götter(für die nächsten 5minuten).

Ich habe etwa 4Stunden mit einem sehr ähnlichen Problem verbracht, das damit zu tun hatte, dass ich die aus einer Assembly geladenen Klassen nicht an ihr Interface binden konnte.

Danke eurem Code konnte ich das lösen.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...