类型'X'在'Y.Z'类型中不存在

时间:2012-06-05 08:55:51

标签: c# .net .net-4.0 compiler-errors

我们的团队最近已从Visual Studio 2008 / .NET3.5迁移到Visual Studio 2010 / .NET4.0。现在,VS2010给了我一个奇怪的错误信息。它可以通过以下程序重现:

using System;

namespace Some.Main
{
}

namespace SomeLib
{
    interface Some
    {
    }
}

namespace ConsoleApplication1
{
    using Some.Main;
    using SomeLib;

    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Press enter to continue");
            Console.ReadLine();
        }
    }
}

这在VS2008中运行得很好,但在VS2010中我收到以下错误消息:

  

“SomeLib.Some”

类型中不存在类型名称“Main”

有趣的是,如果我点击“构建解决方案”,程序构建得很好,我甚至可以毫无问题地执行它。它只是Visual Studio,似乎有这个代码的问题。

不幸的是,我正在研究一个大型的遗留应用程序,我不能(轻松地)更改这些名称空间的名称。

我想知道如何解决这个错误,我也很好奇是什么原因引起的。

3 个答案:

答案 0 :(得分:9)

你只是让编辑器困惑Some既是名称空间又是接口名称,显然它不会按照声明的顺序检查/解析using

如果您想明确指出名称空间而不是类型名称,只需将global::添加到using声明中(从 root 名称空间开始) ),像这样:

using global::Some.Main;

更新
非常好的帖子在这里由@alex在评论中链接:Should 'using' statements be inside or outside the namespace?

答案 1 :(得分:4)

我认为IntelliSense被命名困惑,并且不“理解”谁是谁。

附加屏幕截图演示了正在发生的事情:IntelliSense“认为”Some.Main指的是名为Some的接口,可能是因为在任何地方都没有名为Some的命名空间。

幸运的是,编译器并没有被愚弄,代码似乎工作得很好,就像你说的那样。

IntelliSense being fooled

答案 2 :(得分:1)

试试这个:

using Some.Main;
using SomeLib;

namespace ConsoleApplication1
{
    // instead of placing usings here.
}