Laden...

AppDomain.Load() Problem

Erstellt von nitronic vor 18 Jahren Letzter Beitrag vor 17 Jahren 1.475 Views
nitronic Themenstarter:in
354 Beiträge seit 2004
vor 18 Jahren
AppDomain.Load() Problem

Hallo!

Ich verwende das .NET Framework v2.0.50215 und versuche ein eine eigene AppDomain ein DLL-Assembly zu laden.

Das ganze sieht so aus, dass es sich um einen Application Server handelt, der in mehrere Projekte aufgeteilt ist. Ein Projekt enthält alle Klassen die auch für die Application die geladen werden soll von Relevanz ist (abstrakte Application-Klasse etc.).

Mein Problem ist nun, dass beim Laden der Assembly eine FileNotFoundException geworfen wird, die mir sagt, dass die Assembly oder eine Referenz nicht gefunden wurde.

Beides liegt jedoch im angegebenen Pfad und sollte vorhanden sein. Dabei scheint es auch vollkommen egal zu sein, ob die referenzierten Assemblies im GAC liegen oder im gleichen Verzeichnis der Application.

Folgender Code stellt einen meiner Versuche dar:


AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationBase = Path.GetDirectoryName(fullpath);
setup.ShadowCopyFiles = "yes";
setup.ShadowCopyDirectories = this.shadowPath;

Evidence baseEvidence = AppDomain.CurrentDomain.Evidence;
Evidence evidence = new Evidence(baseEvidence);

AppDomain newDomain = AppDomain.CreateDomain("TestDomain", evidence, setup);

Assembly assembly = newDomain.Load(this.ReadAssembly(fullpath));  // FileNotFoundException

Die Variable fullpath stellt hier den kompletten Pfad zur zu ladenden DLL dar. Die Methode ReadAssembly liest einfach nur die Assembly ein und gibt ein byte[] zurück. Hier nur anzumerken: Ich habe auch versucht die Assembly über


newDomain.Load(AssemblyName.GetAssemblyName(fullpath));

zu laden. Mit dem gleichen Erfolg.

Unter dem .NET Framework 1.1 ergibt sich keine Probleme. Die MSDN gibt mir auch nicht besonderes viele Informationen dazu, da selbst Microsoft in den Beispielen zum 2.0er Framework mit den obsoleten Methoden arbeitet.

Hat hier irgendjemand eine Idee woran das liegen könnte?

Danke,
Nitronic

.NET GUI - Die Community für grafische Oberflächen unter .NET
Jetzt kostenlos besorgen: .NET BlogBook
Norbert Eder
DasBackup

S
8.746 Beiträge seit 2005
vor 18 Jahren

Bei der Byte-Variante könnte das Problem darin liegen, dass die Assembly-Referenzen per Hand aufgelöst werden müssen. Dazu kannst musst du einen Resolver-Eventhandler installieren und die referenzierten Asemblies per Hand laden.

1.820 Beiträge seit 2005
vor 17 Jahren

Hallo!

Ich hatte dasselbe Problem, hab' es mittlerweile dadurch geschafft, dass ich die AppDomainSetup-Felder folgendermassen belegt habe:


AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory;
setup.PrivateBinPath = Path.GetDirectoryName(fullpath);
setup.ShadowCopyFiles = Boolean.TrueString;
setup.ShadowCopyDirectories = this.shadowPath;

Ich hoffe, dass hilft weiter.

Nobody is perfect. I'm sad, i'm not nobody 🙁