Wie kann ich auf eine interne Klasse einer Assembly zugreifen? Angenommen, ich möchte auf System.ComponentModel.Design.DesignerHost zugreifen. Hier ist der DesignerHost eine interne und versiegelte Klasse.
Wie kann ich einen Code schreiben, um die Assembly und den Typ zu laden?.
Im Allgemeinen sollte nicht tun Sie dies - wenn ein Typ als intern markiert wurde, bedeutet dies, dass Sie ihn nicht von außerhalb der Assembly verwenden sollen. Es könnte in einer späteren Version entfernt, geändert usw. werden.
Allerdings können Sie mit reflection does auf Typen und Member zugreifen, die nicht öffentlich sind - suchen Sie nach Überladungen, die ein BindingFlags
-Argument annehmen und BindingFlags.NonPublic
In einschließen die Fahnen, die Sie passieren.
Wenn Sie den Namen voll qualifiziert haben des Typs (einschließlich der Assembly-Informationen) haben, sollte nur der Aufruf von Type.GetType(string)
funktionieren. Wenn Sie die Assembly im Voraus kennen und einen öffentlichen Typ in dieser Assembly kennen, ist es im Allgemeinen einfacher, mit typeof(TheOtherType).Assembly
die Assembly-Referenz abzurufen, und Sie können Assembly.GetType(string)
.
So laden Sie die Assembly und geben den in Ihrem Beispiel angegebenen Namen ein:
Assembly design = Assembly.LoadFile(@"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Design.dll");
Type designHost = design.GetType("System.ComponentModel.Design.DesignerHost");