AppDomain löschen der Assambly.dll nach Unload

11/08/2008 - 09:39 von Michael Burkhardt | Report spam
Hallo ich habe eine Frage: Ich erzeuge eine AppDomain, lade eine Assambly.dll
nach Erledigung der Assambly.dll führe ich ein Appdomain.Unload(appd) duch.
Jetzt möchte ich die Assambly austauschen ohne die eigendliche EXE Datei zu
beenden.
Aber es funktioniert nicht.
Was muss ich tun?
Hier mein Code

Forms WPF exe


void Start()
{
AppDomainSetup setup;
string asmFilename = "AppDomainLibrary.dll";

if (!File.Exists(asmFilename))
{
MessageBox.Show("Assembly: '" + asmFilename + "' existiert nicht!");
return;
}

setup = new AppDomainSetup();
domain = AppDomain.CreateDomain("NewAppDomain", new Evidence, setup);
object obj = domain.CreateInstanceAndUnwrap("AppDomainLibrary",
"AppDomainLibrary.Class1");
MethodInfo mi = obj.GetType().GetMethod("Run");
mi.Invoke(obj, null);
obj = null;
mi = null;
}
...
void Stopp()
{
AppDomain.Unload(domain)
}

Assambly
...
public void Run()
{
// Tu was
}
...


Danke im Voraus
Mfg Michael
 

Lesen sie die antworten

#1 Dirk3
11/08/2008 - 10:59 | Warnen spam
Hallo Michael,

Deine Frage ist etwas verwirrend! ;-)
Du möchtest AppDomainLibrary.dll austauschen oder Deine Exe?
Auf AppDomainLibrary.dll solltest Du nach dem UnLoad wieder vollen Zugriff
haben.
Deine Exe musst Du definitiv beenden (siehe Security etc.).
ps.: ab .NET 3.x gibt es ein MAF (Managed AddIn Framework) und auf CodePlex
den passenden Pipeline-Builder...

MfG
Dirk

"Michael Burkhardt" wrote:

Hallo ich habe eine Frage: Ich erzeuge eine AppDomain, lade eine Assambly.dll
nach Erledigung der Assambly.dll führe ich ein Appdomain.Unload(appd) duch.
Jetzt möchte ich die Assambly austauschen ohne die eigendliche EXE Datei zu
beenden.
Aber es funktioniert nicht.
Was muss ich tun?
Hier mein Code

Forms WPF exe


void Start()
{
AppDomainSetup setup;
string asmFilename = "AppDomainLibrary.dll";

if (!File.Exists(asmFilename))
{
MessageBox.Show("Assembly: '" + asmFilename + "' existiert nicht!");
return;
}

setup = new AppDomainSetup();
domain = AppDomain.CreateDomain("NewAppDomain", new Evidence, setup);
object obj = domain.CreateInstanceAndUnwrap("AppDomainLibrary",
"AppDomainLibrary.Class1");
MethodInfo mi = obj.GetType().GetMethod("Run");
mi.Invoke(obj, null);
obj = null;
mi = null;
}
...
void Stopp()
{
AppDomain.Unload(domain)
}

Assambly
...
public void Run()
{
// Tu was
}
...


Danke im Voraus
Mfg Michael

Ähnliche fragen