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:
geht das überhaupt praktikabel?
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
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.