5

我们的团队最近从 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 似乎对此代码有问题。

不幸的是,我正在开发一个大型遗留应用程序,我无法(轻松)更改这些命名空间的名称。

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

4

3 回答 3

9

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

如果你想明确你指的是命名空间而不是类型名称,只需添加global::using声明中(从命名空间开始),如下所示:

using global::Some.Main;

更新
非常好的帖子在这里由@alex 在评论中链接:“使用”语句应该在命名空间内部还是外部?

于 2012-06-05T09:05:35.590 回答
4

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

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

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

智能感知被愚弄

于 2012-06-05T09:10:26.210 回答
1

尝试这个:

using Some.Main;
using SomeLib;

namespace ConsoleApplication1
{
    // instead of placing usings here.
}
于 2012-06-05T08:58:12.890 回答