类在同一名称空间中找不到另一个类

时间:2015-11-05 19:20:04

标签: c# types namespaces type-resolution

我有一个C#WebApp,我们正在为客户端做。我在项目中有两个类,定义(在单独的文件中)......

通用实用程序库:

namespace Client.WebApp {
    public static class General {
        public static MyDbClass GetDB() {
            //<creates and returns MyDbClass here>
        }
    }
}

PageBase类:

namespace Client.WebApp {
    public class PageBase : System.Web.UI.Page {
        protected MyDbClass dbo { get; set; }

        public PageBase() {
            dbo = General.GetDB();
        }
    }
}

当我尝试编译时,我从dbo = General.GetDB();行得到错误:
The name 'General' does not exist in the current context Client.WebApp.

  • 我仔细检查了两个文件中的命名空间拼写正确。
  • 我尝试在页面库文件中添加顶级命名空间Client.WebApp作为using指令。
  • 我尝试完全限定名称,如dbo = Client.WebApp.General.GetDB();

没有任何帮助,它坚持我的General课程不存在。 有趣的是,当构建遇到此错误并停止时,代码编辑器不会看到此错误,并且该语句不会被误解为错误。

该项目的目标是Framework v.4.5.2,我在VS 2015工作。

3 个答案:

答案 0 :(得分:9)

这是一个奇怪的错误,在我的VS2015中,如果我将文件Build Action设置为“Compile”以外的任何内容,我会在该文件的任何类型上显示错误下划线。

无论如何,这里的解决方案是验证Build Action是否设置为“Compile”,我不确定为什么添加新文件会将构建操作设置为“Compile”以外的任何内容。我还测试了尝试以多种方式添加新文件(选择文本文件模板并将其命名为something.cs),它仍然将其设置为“编译”。您应该验证您的VS2015实例是否已使用最新更新进行更新。

答案 1 :(得分:1)

我遇到了同样的问题:“找不到类型或命名空间”。结果发现该类位于“Build Action”属性设置为“None”的文件中,这意味着该文件未被编译。我将它设置为“C# Compiler”,解决了它。

答案 2 :(得分:0)

我想我可能已经弄清楚了,如果我们在一个假定有内容文件的文件夹中创建一个文件,它将自动设置该文件的构建类型内容。在我的案例中,我在app_code文件夹下创建了一个文件,它是一个类文件,但是构建类型设置为Content,这使其对我拥有的任何其他类都不可用。

也许还有其他原因。