Also mittlerweile sieht es so aus, dass ich keinen Umwandlungsfehler mehr bekomme, sondern er die PluginAssembly nicht laden kann. Da schmiert Assembly.GetTypes() ab, ich vermute das liegt daran, dass in dem Moment die Referenz auf die Interface Bibliothek nicht da ist.
Beide Projekte werden eigentlich mit der Interface Bibliothek kompiliert als Referenz. Also Punkt 1 sollte gewährleistet sein hoffe ich.
AssemblyResolve verwende ich in der Hauptanwendung, jedoch lässt sich diese nicht starten ohne das die Bibliothek vorhanden ist, da die AssemblyResolve erst gar nicht gefragt wird. Das könnte daran liegen das ich in der Hauptanwendung eine globales Objekt des PluginServices deklariert habe.
Nochmal zum Aufbau:
Hauptanwendung referenziert IPlugin.dll und beinhaltet den PluginServiceProvider.
Plugin referenziert IPlugin.dll und beinhaltet das zu ladende Plugin.
IPlugin definiert das Interface der Plugins und des PluginHosts.
Alle drei sind Projektmappen bei mir.
So, wenn ich nun kompiliere habe ich folgende Dateistruktur zusammenkopiert:
Anwendung.exe
IPlugin.dll
Plugins/Plugin1.dll
Das ist mein Ziel das es läuft. Wenn ich nun die Anwendung starte wird erstmal
Assembly.Load(Plugin/Plugin1.dll) geladen.
Danach werden die Types per Assembly.GetTypes() extrahiert und da knallt es. Kopiere ich nun die Plugin1.dll in das Hauptverzeichnis und lade Plugins daraus funktioniert es prima, also fehlt wohl der Bezug zur IPlugin.dll. Aber ich verstehe nicht wieso. IN jedem Beispiel das ich runterlade ist so eine Struktur problemlos möglich...
Wie sichere ich mich ab, dass beide mit der gleichen DLL kompiliert wurden und das passt. Wie sichere ich das beides in der gleihcen appDomain läuft? Oder wäre es sinnvoll das auf mehrere Auszudehnen? Wenn ja, gibts dafür Beispiele?
DAnke schonmal vielmals!
//edit: Die LoaderException von GetTypes gibt folgende aus:
{"Die Datei oder Assembly "IPlugin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden.":"IPlugin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"}
//edit: So nun bin ich mir relativ sicher, dass das kompilat nicht übereinstimmt. weil beim kompilieren von der hauptanwendung die IPlugin.dll neu kompiliert wird... Jetzt mal ne sau blöde frage... Wie stelle ich das ab?