| 

.NET C# Java Javascript Exception

2
Kann Eine .NET-Anwendung eine versionierte ManagedCode dll. Komponente, die aktuell geladen ist
aktualisieren ?

Vorstellung:
- Die Anwendung entlädt die .dll manuell (geht das überhaupt ?)
- Die dll-Datei wird durch eine aktuellere Komponente im Programmordner ersetzt
- aktualisierte dll wird bei nächster Verwendung wieder geladen

Gibt es vielleicht noch andere Lösungskonzepte ?
News:
03.08.2011
Gast
21 2
3 Antworten
1
Hallo,

eine Dll zu wieder entladen ist meines Wissens nicht möglich. Was man entladen kann, sind AppDomains.
Eine Möglichkeit wäre also, die Dlls, die Du potentiell entladen willst, in eigenen AppDomains zu hosten. Der einzige "Nachteil" ist, dass Du nun eine Cross-AppDomain-Kommunikation für die Komponenten in den eigenen AppDomains aufbauen musst. Dafür hast Du mehrere Möglichkeiten:

Wenn Du das Ganze mit einer der oben genannten Möglichkeiten umgestellt hast, dann eröffnen sich auch andere Möglichkeiten der Verteilung deiner Komponenten, z.B. eigener Prozess, Windows Service, Server, ... (nur so vielleicht zum Weiterdenken...)

Viel Erfolg
Florian
03.08.2011
ffordermaier 8,4k 3 9
0
Schau dir folgenden Artikel an:
C# update DLL without recompiling the project
Zudem kannst du über entkoppelte Systeme nachdenken, z. B. MEF
Damit habe ich sehr gute Erfahrungen gemacht.
03.08.2011
Jürgen Luhr 7,1k 1 9
Wenn ich die Frage richtig verstanden habe ist ein Neustart der Applikation nicht erwünscht.
Für ein Assembly Binding Redirect braucht man zwar keinen Recompile, aber die Applikation muss mit der angepassten Konfiguration neu gestartet werden, d.h. es wird nicht nur die Dll entladen, sondern mit ihr die gesamte Anwendung.
Mit MEF kenn ich mich nicht aus, habe aber auch meine Zweifel, dass es Assemblies zur Laufzeit entladen kann (weil es ohne Vorkehrungen einfach nicht geht).
ffordermaier 04.08.2011
Ich habe eine Diskussion gefunden, die darauf hindeutet, dass auch MEF dazu nicht ohne weiteres in der Lage ist (http://stackoverflow.com/questions/5395817/how-to-remove-mef-plugins-at-runtime)
ffordermaier 04.08.2011
Stimmt. Das scheint doch nicht so einfach zu sein. Bei mir sitzt ein WCF-RESTful-Service dazwischen. Da sieht die Sache ganz anders aus ;o)
Jürgen Luhr 04.08.2011
0
Ayende hat mal einen tollen Artikel/ScreenCast zu dem Thema gemacht: Hot Code Swapping. Dort beschreibt er (ich meine auch mit Code-Beispiel) sehr gut wie das gehen könnte (unter Verwendung von MarshalByRefObject). Schaue es dir an, ist wohl genau das was du machen willst.
05.08.2011
Sparky 109 3

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH