2009-03-09 7 views
1

Considérons le code,C# doute GetType, Managed CodeGen

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

ici pour trouver le type de "System.Drawing.Font" l'assemblée "System.Drawing.dll" est nécessaire. comment l'utiliser.?

i.e wat si je le fais, de sorte que la valeur de t0 ne sera pas nulle.

Tenir compte i ave une dll, proj.dll et je dois trouver le type de la classe Class1 qui est présent dans le dll.

+0

Êtes-vous essayez d'ajouter dynamiquement .dll et puis faire quelque chose avec elle? –

+0

en fait je veux ajouter une DLL de bibliothèque de classes et obtenir le type de la classe dans la DLL. – SyncMaster

Répondre

9

Spécifiez l'ensemble, y compris le numéro de version pour les assemblées fortement nommées:

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

Bien sûr, si elle est vraiment juste System.Drawing.Font (ou un autre type que vous savez à la compilation), utilisez typeof:

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

Si vous connaissez un autre type dans le même ensemble à la compilation, vous pouvez utiliser Assembly.GetType:

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

Type t = Type.GetType ("System.Drawing.Font, System.Drawing"); retruns les valeurs NULL à t .. ??? comment le résoudre. – SyncMaster

+0

Vous devez spécifier le nom complet de l'assembly, y compris la version et la clé publique. Si vous utilisez la ligne que Jon a posté dans sa réponse, cela devrait fonctionner. – Andy

+0

@Andy: La première version de ma réponse n'avait pas la version. Je me doutais que c'était nécessaire, mais je ne le savais pas. J'ai posté une réponse rapide indiquant cela, puis écrit la petite application de test. –

2

passer le nom fort de l'assemblée pour le charger, puis charger le type de celui-ci, comme

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

merci. Que faire si je veux ajouter une DLL de bibliothèque de classes et obtenir le type d'une classe dans la DLL ..? Comment ajouter cette DLL et trouver son jeton Version, sulture et clé publique.? – SyncMaster