Laden...

Dlls Dynamisch Ent- Und Neuladen

Erstellt von numpsy vor 14 Jahren Letzter Beitrag vor 14 Jahren 861 Views
N
numpsy Themenstarter:in
231 Beiträge seit 2007
vor 14 Jahren
Dlls Dynamisch Ent- Und Neuladen

Dlls dynamisch entladen und neuladen... geht das und wenn wie?

also ich will aus nem gestartetn c# programm, ne dll mit anweisungen laden, die ich in meinem vs erst zurechtschreiben... sprich ich kompiliere die dll und dann starte ich im programm: GO

und die neuen algorithmen werden dann genutzt...

meine letzte info dazu war:

  • man kann assemblies nich entladen
  • man kann nur neue kontexte öffnen
  • aber zwischen denen kann man wiederum nur per serialisierung daten übertragen
  • also keine referenzen
    = sehr langsam
    bzw:
  • c# läuft im prinzip als "managed code".. wie in einer sandbox
  • du hast keinen speicherzugriff auf externe komponenten
  • du kannst in diese sandbox ne dll reinladen
  • aber die bekommt man dann nich mehr raus

geht das überhaupt praktikabel?

D
500 Beiträge seit 2007
vor 14 Jahren

Hallo,

such mal nach dem Stichwort Plugin hier im Forum. Wenn Du richtig entladen moechtest, dann wir das schwieriger und Du musst mit ApplicationDomains arbeiten (momentan weiss ich auch nicht 100%ig ob das selbst da moeglich ist). Ein weiterer Stichpunkt in Richtung Plugin ist MEF sein.

Gruss,
DaMoe

1.130 Beiträge seit 2007
vor 14 Jahren

meine letzte info dazu war:

  • man kann assemblies nich entladen
  • man kann nur neue kontexte öffnen

Du meinst sicher appdomains und die kann man als ganzes entladen.

  • aber zwischen denen kann man wiederum nur per serialisierung daten übertragen
  • also keine referenzen

MarshalByRefObject und unmanaged zeiger gehen (keine gchandles, soweit ich weiß)

= sehr langsam

kommt drauf an was und wie man macht, es ist wenn mans richtig macht sogar halbwegs bequem.

bzw:

  • c# läuft im prinzip als "managed code".. wie in einer sandbox Sandbox heißt für mich, dass man nix kaputt machen kann so richtig. Das ist aber nicht der Fall, man kann standardmäßig mit pointern und pinvoke arbeiten, esseiedenn man setzt entsprechende restriktionen, dann ist es eine echte sandbox.
  • du hast keinen speicherzugriff auf externe komponenten

Wenn man keine restriktionen setzt, kann man pointer nehmen.

  • du kannst in diese sandbox ne dll reinladen
  • aber die bekommt man dann nich mehr raus

die sandbox kann man in verschidene domains unterteilen und diese einzeln entladen. Jede domain hat ihre eigenen Sicherheitsbestimmungen.

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!