簡體   English   中英

'YZ'類型中不存在類型'X'

[英]The type 'X' does not exist in the type 'Y.Z'

我們的團隊最近已從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,似乎有這個代碼的問題。

不幸的是,我正在研究一個大型遺留應用程序,我不能(輕松地)更改這些名稱空間的名稱。

我想知道如何解決這個錯誤,我也很好奇是什么導致它。

你只是讓編輯器感到困惑 Some是命名空間和接口名稱,顯然它不會按照聲明的順序using s進行檢查/解析。

如果你想明確指出你是指代名稱空間而不是類型名稱,只需將global::添加到using聲明(從名稱空間開始),如下所示:

using global::Some.Main;

UPDATE
@alex在評論中鏈接的非常好的帖子: 'using'語句應該在命名空間的內部還是外部?

我認為IntelliSense被命名困惑,並不“理解”誰是誰。

隨附的屏幕截圖演示了正在發生的事情:IntelliSense“認為” Some.Main是指名為Some的接口,可能是因為沒有任何地方名為Some的命名空間。

幸運的是,編譯器並沒有被愚弄,代碼似乎工作得很好,就像你說的那樣。

智能感知被愚弄了

試試這個:

using Some.Main;
using SomeLib;

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM