2010-02-10 9 views
3

J'ai un projet Web asp.net qui fait référence à un projet de domaine. Dans le projet Web, je souhaite créer une instance d'une classe à partir du projet de domaine en utilisant la réflexion, mais j'ai toujours la valeur null (Nothing, in VB).Échec de GetType sur une classe dans un assembly référencé

NOTE: J'utilise le nom de classe non qualifié, et espérais que la recherche serait effectuée comme MSDN semble indiquer (au niveau de l'Assemblée)

Dim myType comme type = Type.GetType ("MetricEntity") « // Rien rendement (nul)

'// lets try this 
    Dim WasFound As Boolean = False 
    For Each ObjectType In Me.GetType.Assembly.GetExportedTypes 
    If ObjectType.Name = theClassName Then 
     WasFound = True 
     Exit For 
    End If 
    Next 

La réponse à cette question semble être généralement:

Dim myType as Type = Type.GetType("System.Linq.Enumerable, System.Core, " 
    + "Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")); 

Mais je ne vois pas t La logique d'avoir à coder en dur le numéro de version (ou avoir à placer dans un fichier de configuration) .... alors que se passe-t-il si la version change et j'oublie de la mettre à jour dans le code de réflexion ..... est-il possible de faire un GetType, en ignorant Version, Culture et PublicKeyToken?

Répondre

2

Vous pouvez faire quelque chose comme cela, en ignorant ces attributs:

Dim myType as Type = Type.GetType("System.Linq.Enumerable")); 

ou:.

Dim myType as Type = Type.GetType("System.Linq.Enumerable, System.Core")); 
+0

Merci. Note à d'autres .... la deuxième syntaxe est nécessaire pour une classe qui réside dans un assembly externe, à savoir: si vous faites le Type.GetType de votre projet web sur une classe de votre projet de domaine, vous DEVEZ spécifier l'assembly. – tbone

5

Vous pouvez obtenir un type de nom seul si vous avez l'Assemblée, il est en ça marcherait pour toi?

De cette façon, vous pouvez spécifier le nom de l'assembly dans un emplacement distinct des types auxquels vous essayez d'accéder.

Assembly assembly = typeof(System.Linq.Enumerable).Assembly; 
Type type = assembly.GetType("System.Linq.Enumerable"); 
+0

+1 Fonctionne bien - merci! – Dan

Questions connexes