.net类“不是”类的成员..即使它是?

时间:2010-05-11 11:42:21

标签: .net namespaces

查看一些旧代码,我遇到了一个奇怪的命名空间错误。

假设我有两个项目,HelperProject和WebProject。每个完整的命名空间 - 在应用程序属性中给出 - 是myEmployer.HelperProject和myEmployer.Web.WebProject。

Web项目中的页面充满了使用帮助程序项目中的类的语句。没有import / using语句,但是对bin中添加的辅助项目有一个引用。一些示例行可能是:

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

然而,以这种方式编写的每一行都抛出错误'HelperProject'不是'myEmployer'的成员。如果你声明这样的语句:

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

一切似乎都很好。

在解决方案对象浏览器和bin文件夹中,HelperProject将显示其完整命名空间myEmployer.HelperProject。

我不想改变所有的陈述,而且我怀疑这是掩盖了一个更基本的问题。但我不知道发生了什么。有人可以提供任何指示吗?

干杯, 马特

3 个答案:

答案 0 :(得分:1)

应用程序属性中的命名空间仅适用于创建的新文件。如果在不更改现有文件的情况下更改其名称空间,则其名称空间将与文件中指定的一样。

答案 1 :(得分:1)

您是否有命名空间冲突,myEmployer是进行调用的命名空间的类或子命名空间。尝试更改以下格式的引用:

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

编辑:

如果添加以下using语句,它将通过告诉编译器在此类myEmploye的上下文中删除歧义。表示global :: myEmployer,而不是名为myEmployer的任何其他类或名称。

using myEmployer = global::myEmployer;

答案 2 :(得分:0)

首先,正如ck所说,项目设置中的默认命名空间仅用于在停止新(类)文件时提供命名空间。因此,您应该检查文件中是否具有正确的命名空间。例如:

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

如果这是不同的,例如。 namespace HelperProject,您会收到错误。

如果名称空间是正确的,您可能有一个局部变量或字段或类似名称myEmployer。尝试右键单击myEmployer并选择“转到定义”(或按F12)。

P.S。:名称空间的标准外壳是PascalCasing,即MyEmployer。*