2010-05-11 12 views
1

En regardant un code plus ancien, j'ai rencontré une étrange erreur d'espace de noms..net Classe "n'est pas un membre de" Classe .. même si c'est?

Disons que j'ai deux projets, HelperProject et WebProject. L'espace de noms complet de chaque - tel que donné dans les propriétés de l'application - est myEmployer.HelperProject et myEmployer.Web.WebProject.

Les pages du projet Web sont remplies d'instructions qui utilisent des classes du projet d'assistance. Il n'y a pas d'instructions d'importation/utilisation, mais il y a une référence au projet d'assistance ajouté dans la corbeille. Quelques lignes par exemple pourraient être:

myEmployer.HelperProject.StringHelper.GetFixedLengthText(Text, "", Me.Width, 11) 
myEmploter.HelperProject.Utils.StringHelper.EstimatePixelLength(Text, 11) 

Cependant, chaque ligne qui est écrit de cette manière est de lancer l'erreur « HelperProject » est pas un membre de « myEmployer ». Si vous déclarez les instructions comme ceci:

HelperProject.StringHelper.GetFixedLengthText(Text, "", Me.Width, 11) 
HelperProject.Utils.StringHelper.EstimatePixelLength(Text, 11) 

Tout semble bien.

Dans le navigateur d'objets de la solution et dans le dossier bin, HelperProject apparaît avec son espace de nom complet, myEmployer.HelperProject.

Je ne veux pas avoir à changer toutes les déclarations, et d'ailleurs je soupçonne que cela masque un problème plus fondamental ici. Mais je n'ai aucune idée de ce qui se passe. Quelqu'un peut-il offrir des pointeurs s'il vous plaît?

Cheers, Matt

Répondre

1

Si vous avez un conflit d'espace de noms, myEmployer est une classe ou un sous-espace de noms de l'espace de noms où l'appel est en cours. Essayez de changer sur des références au format suivant:

global::myEmployer.HelperProject.StringHelper.GetFixedLengthText(Text, "", Me.Width, 11) 

Edit:

Si vous ajoutez le ci-dessous en utilisant la déclaration il sera devrait lever l'ambiguïté en disant au compilateur que dans le cadre de cette myEmploye de classe. signifie global :: myEmployer et pas n'importe quelle autre classe ou namespasce appelée myEmployer.

using myEmployer = global::myEmployer; 
+0

Yep, l'ajout global supprime l'erreur. Qu'est-ce que cela signifie? –

+0

Cela signifie que vous avez un conflit d'espace de nom en ce que myEmployer.HelperProject est ambigu. Si j'ai édité mon post avec une solution pour que vous n'ayez pas à changer toutes les déclarations. –

1

L'espace de noms dans les propriétés d'application applique uniquement aux nouveaux fichiers créés. Si vous modifiez l'espace de nom dans leur sans modifier les fichiers existants, leur espace de noms sera spécifié dans les fichiers.

0

D'abord, comme ck dit, l'espace de noms par défaut dans les paramètres d'un projet ne sert qu'à donner un espace de noms lorsque ceating nouveaux fichiers (classe). Vous devriez donc vérifier que dans vos fichiers vous avez l'espace de noms correct. Par exemple:

namespace myEmployer.HelperProject 
{ 
    public class StringHelper 
    { 
     public static string GetFixedLengthText(...) 
     {} 
    } 
} 

Si cela est différent, ex. namespace HelperProject, vous obtiendrez l'erreur.

Si les espaces de noms sont corrects, vous pouvez avoir une variable locale ou un champ ou similaire appelé également myEmployer. Essayez avec le bouton droit de la souris sur myEmployer et choisissez "Aller à la définition" (ou appuyez sur F12).

P.S .: boîtier standard pour les espaces de noms est PascalCasing, à savoir MyEmployer. *

Questions connexes