Nun, hallo und guten Abend allerseits.
Ich fange mal an, mein Problem zu beschreiben:
Ich habe ein Programm, welches vollstens durch eine Plugin-Schnittstelle gesteuert werden kann. Die Plugins sind C#-Quelltexte. Die Plugins sind alle in einem Ordner gespeichert und werden rekursiv durchlaufen werden.
Nun habe ich eine Funktion
private Assembly BuildAssembly(string code, string name) {
, welche dann die Dateien in ein Assembly umwandeln. Zusätzlich wird noch die Datei "ConsolePlugin.dll", welche ein Interface beinhaltet, als Referenz hinzugefügt.
public interface IPlugin {
void Start();
void Execute(string input);
}
So, nun im Plugin:
namespace BigConsolePlugin {
public class BigConsolePlugin : ConsolePlugin.IPlugin {
Ich habe die benötigten Methoden und Felder alle implementiert. Es gibt auch keine Fehler im Plugin selber, sondern dann in der folgenden Zeile:
Assembly asm = BuildAssembly(code, name);
/* ... */
instance = asm.CreateInstance(namespacename + "." + classname);
if (instance == null) {
throw new Exception("Konnte Instanz dieses Plugins nicht erstellen...");
}
Debugging zeigt folgendes:
namespacename = "BigConsolePlugin"
classname = "BigConsolePlugin"
instance = null
Nachtrag:
asm ist nicht null, sondern beispielsweise "ftp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"
Woran könnte das instance = null liegen? Er spuckt auch keine andere Ausnahme dort aus...
P.S.: Konstruktor ist vorhanden... Plugins, welche nicht vom IPlugin abhängig sind, funktionieren einwandfrei.
Wenn ich eine Implemntation extra vergesse, gibt er mir dieses Szenario auch als Fehler aus.
Ich hoffe ihr könnt mir dabei helfen 😃
Mfg
Dennis Z.
Hallo DeZio,
so richtig Helfen kann ich Dir leider nicht, da ich auf den ersten Blick keinen Fehler erkennen kann. Komisch nur das keine Exception kommt
Jedoch, hat es einen Bestimmten Grund, dass deine Plugins als QuellText vorliegen?
Viele Grüße
Lars
Versuche mal über Assembly.GetType an die Typeninformationen zu kommen und gucke ob dabei evtl. eine Exception fliegt.