类无法在相同命名空间中找到另一个类

7

我有一个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.
  • 我已经仔细检查了两个文件中的命名空间是否正确。
  • 我尝试在pagebase文件中添加顶级命名空间Client.WebApp作为使用指令。
  • 我尝试完全限定名称,如dbo = Client.WebApp.General.GetDB();
没有帮助,它坚持认为我的General类不存在。 有趣的是,虽然构建遇到此错误并停止,但代码编辑器并不看到此错误,并且该语句不会变成红色下划线。
该项目针对Framework v.4.5.2,我正在使用VS 2015。

这两个类在同一个程序集中吗? - Mihai Caracostea
是的,它们都在核心WebApp项目中,而不是外部DLL项目中。命名空间只是一个例子。我更改了它的名称,因为最初创建项目的人设置的命名空间包括客户端名称。我更改了示例代码以消除这种歧义。 - eidylon
General类在构建时没有红色波浪线,也没有报告任何错误。就我所看到的,它是正确的。 - eidylon
1
尝试手动删除解决方案中所有项目目录下的“bin”和“obj”文件夹。然后再尝试清除并重新构建。 - gmiley
2
尝试将该类复制到与“PageBase”相同的文件中,可能是您意外地将“General”cs文件的设置设置为其他内容而不是“编译”,您可以检查文件属性,特别是构建操作吗? - Ron Beyer
显示剩余11条评论
5个回答

11

这是一个奇怪的错误,在我的VS2015中,如果我将文件的“生成操作(Build Action)”设置为除“编译(Compile)”以外的任何其他选项,则在该文件中的任何类型上都会出现错误下划线。

无论如何,这里的解决方案是验证“生成操作(Build Action)”是否已设置为“编译(Compile)”,我不确定为什么添加新文件会将生成操作设置为除“编译”以外的其他选项。我还尝试以多种方式添加新文件(选择文本文件模板并只命名为something.cs),但它仍然将其设置为“编译(Compile)”。您应该验证您的VS2015实例是否更新到最新版本。


哥们,你刚刚帮我解决了一个让我疯狂的问题!由于某种原因,一个文件的构建操作被设置为“内容”,而不是“编译”。这个问题非常难以发现。看到你的答案后,我才检查出来。 - DWright
1
如果文件被设置为“编译”,你可能需要完全重新启动Visual Studio。这个错误似乎一直困扰着VS2017。 - ecnepsnai
确认,关闭VS17,重新打开,清理,重建似乎解决了这个问题。 - Bryan Harrington
正如 ecnepsnai 所说... 重新启动解决了问题。谢谢。 - Jeff Blumenthal

4

我曾遇到同样的问题:“找不到类型或命名空间”。后来发现该类在一个“生成操作”属性设置为“无”的文件中,这意味着该文件未被编译。我将其设置为“C# 编译器”,问题得到解决。


1
有时候我也会遇到这个问题。关闭 Visual Studio 并重新打开它通常可以解决这个问题。

0

我认为我可能已经弄清楚了,如果我们在一个应该有内容文件的文件夹中创建一个文件,它会自动将该文件的构建类型设置为内容。在我的情况下,我在app_code文件夹下创建了一个类文件,但构建类型被设置为内容,这使得其他类无法使用它。

也许还有其他原因。


0
尝试在项目文件夹中创建一个新的类,然后将其移动到您想要的文件夹中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接