我们的团队最近已从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,似乎有这个代码的问题。
不幸的是,我正在研究一个大型的遗留应用程序,我不能(轻松地)更改这些名称空间的名称。
我想知道如何解决这个错误,我也很好奇是什么原因引起的。
答案 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
的命名空间。
幸运的是,编译器并没有被愚弄,代码似乎工作得很好,就像你说的那样。
答案 2 :(得分:1)
试试这个:
using Some.Main;
using SomeLib;
namespace ConsoleApplication1
{
// instead of placing usings here.
}