Hallo,
ich arbeite an einem Projekt das Komponenten von Drittherstellern verwendet. Eine Komponente liegt nun in zwei Versionen vor und ich muss leider beide unterstützen. In Version 2 wurde eine zusätzliche Basisklasse eingeführt, die in Version 1 noch nicht vorhanden war.
Es gibt also 2 DLLs:
Komp.dll (in Version 1.0) Komp.dll (in Version 2.0)
Im Programm würde ich gerne zur Laufzeit je nach Auswahl Version 1 oder 2 laden. Ich habe zwei Projekte in der Solution aufgemacht und jeweils auf die verschiedenen DLLs referenziert. Bei beiden DLLs habe ich die Option "Lokale Kopie" auf "False" gesetzt, da ich sie zur Laufzeit aus einem anderen Installationsordner laden möchte (Assembly.LoadFrom(path)). In der Main Methode habe ich eine Methode Resolver auf das Event AssemblyResolve registriert. Resolver wird somit ausgeführt, wenn die Auflösung einer Referenz zur Laufzeit notwending ist.
Ich stehe vor folgendem Problem: Wenn ich Version 2 auswähle, wird die zugehörige DLL ordnungsgemäß gefunden und erfolgreich geladen. Wähle ich jedoch Version 1 aus, erhalte ich eine Ausnahme mit der Meldung:
System.IO.FileNotFoundException Datei oder Assembly konnte nicht geladen werden. Das System konnte die angegebene Datei nicht finden
Interessanterweise funktioniert das Laden von Version 1 problemlos, sobald ich den Code für Version 2 aus dem Projekt ausschließe. Die DLLs befinden sich in den jeweils vorgesehenen Verzeichnissen – dies überprüfe ich zusätzlich durch einen gezielten Aufruf von File.Exists(), um sicherzustellen, dass die Dateien tatsächlich vorhanden sind.
Was mache ich falsch?