2009-09-11 7 views
4

Je rencontre le problème suivant lors de l'utilisation de la réflexion.Problème de réflexion C#

La déclaration suivante devient fausse:

object[] attributes = someType.GetCustomAttributes(true); 

if (attributes[0] is NUnit.Framework.TestFixtureAttribute) 
    return true; 

Cependant, cette évalue true:

object[] attributes = someType.GetCustomAttributes(true); 

if (attributes[0].ToString() == "NUnit.Framework.TestFixtureAttribute") 
    return true; 

Toutes les idées pourquoi?

Répondre

8

Peut-être que le chargement d'une version différente de l'assemblage est en cours?

Comparer attributes[0].GetType().Assembly avec typeof(NUnit.Framework.TestFixtureAttribute).Assembly. Effectuez simplement une comparaison de type de référence - même si deux instances Assembly ont été chargées à partir du même fichier, s'il s'agit de deux instances distinctes, tous les types créés à partir de ces instances seront distincts (échec de is).

+0

Je suis entièrement d'accord. – Will

+0

typeof (NUnit.Framework.TestFixtureAttribute) .Assemblage donne Le type 'NUnit.Framework.TestFixtureAttribute' existe dans 'nunit.framework.dll' et 'nunit.framework.dll' Je suppose donc il y a 2 versions 'nunit.framework.dll' sur mon système. Merci! – jamesaharvey

3

La classe que vous testez a probablement été construite avec une version différente de nunit.framework.dll