2009-03-09 9 views
1

den Code BetrachtenC# Zweifel in GetType, Managed CodeGen

Type t0 = Type.GetType("System.Drawing.dll"); 
Type t1 = Type.GetType("System.Drawing.Font"); 

Hier, um Art von "System.Drawing.Font" die Versammlung "System.Drawing.dll" ist zu finden benötigt. wie man es benutzt.?

d. H., Wenn ich das tue, so dass der Wert t0 nicht null sein wird.

Betrachten i ave eine dll, proj.dll und ich brauche den Typ der Klasse Class1 zu finden, die in der DLL vorhanden ist.

+0

Versuchen Sie, dynamisch DLL hinzufügen und dann mit ihm etwas zu tun? –

+0

Eigentlich möchte ich eine Klassenbibliothek dll hinzufügen und den Typ der Klasse in der DLL erhalten. – SyncMaster

Antwort

9

die Baugruppe angeben, einschließlich der Versionsnummer für stark benannte Baugruppen:

Type t = Type.GetType("System.Drawing.Font,System.Drawing,"+ 
         " Version=2.0.0.0, Culture=neutral, "+ 
         "PublicKeyToken=b03f5f7f11d50a3a"); 

Natürlich, wenn es wirklich ist nur System.Drawing.Font (oder ein anderer Typ, den Sie bei der Kompilierung-Zeit kennen), typeof verwenden:

Type t = typeof(System.Drawing.Font); 

Wenn Sie einen anderen Typ in der gleichen Baugruppe zur Compile-Zeit kennen, können Sie Assembly.GetType verwenden:

Type sizeType = typeof(System.Drawing.Size); 
Assembly assembly = sizeType.Assembly; 
Type fontType = assembly.GetType("System.Drawing.Font"); 
+0

Geben Sie t = Type.GetType ("System.Drawing.Font, System.Drawing") ein; Retruns Werte NULL zu t .. ??? Wie man es löst. – SyncMaster

+0

Sie müssen den vollständigen Namen der Assembly angeben, einschließlich der Version und des öffentlichen Schlüssels. Wenn Sie die Zeile verwenden, die Jon in seiner Antwort geschrieben hat, sollte es funktionieren. – Andy

+0

@Andy: Die erste Version meiner Antwort hatte nicht die Version in. Ich vermutete, dass es notwendig war, aber wusste es nicht ohne weiteres. Ich habe eine kurze Antwort darauf geschrieben und dann die kleine Test-App geschrieben. –

2

Geben der starke Name der Assembly zu laden, und dann daraus die Art laden, wie

Assembly asm = Assembly.Load("System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"); 
      Type font = asm.GetType("System.Drawing.Font"); 
+0

danke. Was ist, wenn ich eine Klassenbibliothek dll hinzufügen und den Typ einer Klasse in der DLL erhalten möchte? wie Sie diese DLL hinzufügen und finden Sie ihre Version, Sulture und öffentlichen Schlüssel-Token.? – SyncMaster