查看一些旧代码,我遇到了一个奇怪的命名空间错误。
假设我有两个项目,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。
我不想改变所有的陈述,而且我怀疑这是掩盖了一个更基本的问题。但我不知道发生了什么。有人可以提供任何指示吗?
干杯, 马特
答案 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。*