Laden...

TypeBuilder und Interfaces: TypeLoadException

Erstellt von TheBrainiac vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.186 Views
TheBrainiac Themenstarter:in
795 Beiträge seit 2006
vor 13 Jahren
TypeBuilder und Interfaces: TypeLoadException

Hi @ All.

Ich muss z.Zt. eine Klasse schreiben, die mir aus einem Interface und einem Objekt, welches dieses Interface nicht implementiert, aber die gleichen Methoden hat, einen Proxy bastelt (DuckTyping).

Soweit kein Problem. Allerdings funktioniert das Hinzufügen des Interfaces nicht so wirklich:

var asmBuilder = Thread.GetDomain().DefineDynamicAssembly(new AssemblyName {
    Name = "SoWieSo"
}, AssemblyBuilderAccess.Run);
var modBuilder = asmBuilder.DefineDynamicModule("SoWieSo");
var typeBuilder = modBuilder.DefineType("SoWieSo", TypeAttributes.Public | TypeAttributes.Class);
            
typeBuilder.AddInterfaceImplementation(typeof(IMyInterface));

//Ganz viel IL-Kram

var myType = typeBuilder.CreateType();

In der letzten Zeile bekomme ich eine TypeLoadException:

System.TypeLoadException: Der Typ "SoWieSo" in der Assembly "SoWieSo, ..." versucht, eine Schnittstelle zu implementieren, auf die nicht zugegriffen werden kann.

Ich muss bestimmt die Assembly der Schnittstelle noch referenzieren, aber ich finde einfach nicht heraus, wo.

Gruß, Christian.

`There are 10 types of people in the world: Those, who think they understand the binary system Those who don't even have heard about it And those who understand "Every base is base 10"`
TheBrainiac Themenstarter:in
795 Beiträge seit 2006
vor 13 Jahren

Habe inzwischen herausgefunden, dass man das Interface auch beim erstellen des Types mit angeben muss, aber das ändert nichts an der Exception.

var typeBuilder = modBuilder.DefineType("SoWieSo", TypeAttributes.Public | TypeAttributes.Class, typeof(object), new Type[] { typeof(IMyInterface) }); 
`There are 10 types of people in the world: Those, who think they understand the binary system Those who don't even have heard about it And those who understand "Every base is base 10"`
TheBrainiac Themenstarter:in
795 Beiträge seit 2006
vor 13 Jahren

So. Problem gelöst...

Mein Interface war ohne Zugriffsmodifizierer implementiert. Habs jetzt Public, und die Exception ist weg...

Danke trotzdem fürs lesen 👍

`There are 10 types of people in the world: Those, who think they understand the binary system Those who don't even have heard about it And those who understand "Every base is base 10"`