【问题标题】:The type 'X' does not exist in the type 'Y.Z'“Y.Z”类型中不存在“X”类型
【发布时间】:2012-06-05 08:55:51
【问题描述】:

我们的团队最近从 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 中我收到以下错误消息:

类型名称“Main”在类型“SomeLib.Some”中不存在

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

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

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

【问题讨论】:

  • 试试using global::Some.Main;
  • 这很有趣。确切的代码在 Mono(最新)上编译。但是在 Visual Studio 2010 上,它没有
  • @MichaelBuen 更糟糕的是,因为在 Visual Studio 2008 上,它也可以编译。
  • ideone 在其 C# 中使用 Mono。在此处查看您的代码,编译良好ideone.com/zmLCO
  • 或许询问 Eric Lippert 是个好主意。他可以解释差异

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


【解决方案1】:

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

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

using global::Some.Main;

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 在您进行构建后,IntelliSense 也会停止抱怨。
    • @HenkHolterman 直到你做出改变;然后它回来了:)。
    • @HenkHolterman 更有趣的是,我尝试构建它,它可以编译。然而,当您更改代码时它会出现错误。 Visual Studio IDE 团队和 C# 编译器团队是独立的团队吗?
    • @MichaelBuen 我猜他们不仅如此,他们使用完全不同的技术来解析代码。对于 Intellisense,他们的关键点是速度和容错性。
    【解决方案3】:

    试试这个:

    using Some.Main;
    using SomeLib;
    
    namespace ConsoleApplication1
    {
        // instead of placing usings here.
    }
    

    【讨论】:

    • 当心,移动usings 可能会导致代码破坏,应该盲目地这样做!见stackoverflow.com/questions/125319/…
    • @alex: 但是我总是在命名空间之外使用 using 并且从来没有听到任何问题。
    猜你喜欢
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2019-01-11
    • 2020-12-18
    • 2017-04-09
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多