Ich versuche, Plugins zu meinem Programm hinzuzufügen, und das sieht gut aus, außer dass ich den richtigen Typ von der DLL nicht übertragen kann. Ich habe eine Lösung mit mehreren Projekten darauf. Eines des Projekts ein Land Schicht ist, die eine CountryBase tatsächlich hält (definiert als öffentliche abstrakte Klasse CountryBase: CountryLayers.ICountryBase) Das Interface (öffentliche Schnittstelle ICountryBase)Problem mit dem dynamischen Laden einer DLL in mein Programm
an einem anderen Projekt ich die „Implementation“ für die haben Land. Diese DLL wird zur Laufzeit geladen, dies mit:
Assembly assembly = Assembly.LoadFrom(file);
//get the class from the assembly
foreach (Type t in assembly.GetTypes())
{
//just for debugging
Console.WriteLine(t.FullName);
}
Type localType = assembly.GetType("CountryLayers.Local");
if (localType != null)
{
Country countrydata = new Country();
countrydata.ObjectType = localType;
countrydata.CountryObject = Activator.CreateInstance(localType);
countrydata.CountryObject2 = (CountryBase) countrydata.CountryObject;
countrydata.FileName = file;
CountryList.Add(countrydata);
}
Wo Lokalen der Name der Klasse, die als öffentliche Klasse Local definiert: CountryLayers.CountryBase,
CountryLayers.ICountryBasecountrydata nur hält Zeiger. CountryObject2 ist als CountryBase definiert (ich habe es auch als IcountryBase versucht). Aber es hat immer zurückgegeben, dass der Typ nicht umwandelbar ist.
Die Schreibkonsole der Konsole zeigte, dass in der Assembly alle Klassen geladen sind, die zum Länderlayer und auch zur lokalen Klasse gehören.
Also An diesem Punkt weiß ich nicht, ob der Fehler liegt, weil ich alles auf der gleichen Lösung habe, oder das Problem ist, dass ich die Schnittstelle und die abstrakte Klasse in einer fehlerhaften Reihenfolge verwende. Wenn die create-Instanz das Objekt zurückgibt, enthält dieses Objekt alle in der abstrakten Klasse definierten Eigenschaften, aber keine Methode.
Aber ich habe alles auf der gleiche Lösung jetzt, für das Debuggen und Testen .. und nicht funktioniert .. (gleiche Lösung, anderes Projekt für jeden von ihnen) ... – gbianchi