5

私たちのチームは最近、Visual Studio 2008/.NET3.5からVisualStudio2010/.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」に存在しません

興味深いことに、「Build Solution」を押すと、プログラムは問題なくビルドされ、問題なく実行することもできます。このコードに問題があるように見えるのは、VisualStudioだけです。

残念ながら、私は大規模なレガシーアプリケーションに取り組んでおり、これらの名前空間の名前を(簡単に)変更することはできません。

このエラーを修正する方法を知りたいのですが、何が原因なのかも知りたいです。

4

3 に答える 3

9

エディターを混乱させるだけです。Someは名前空間とインターフェース名の両方であり、明らかに、using宣言された順序でsをチェック/解析しません。

タイプ名ではなく名前空間を参照していることを明確にしたい場合は、次のように(ルート名前空間から開始するために)宣言に追加global::するだけです。using

using global::Some.Main;

UPDATE
コメント内の@alexによってリンクされたSOに関する非常に良い投稿:'using'ステートメントは名前空間の内側または外側にあるべきですか?

于 2012-06-05T09:05:35.590 に答える
4

IntelliSenseは名前付けに混乱していて、誰が誰であるかを「理解」していないと思います。

添付のスクリーンショットは、何が起こっているかを示しています。IntelliSenseが「考える」とは、名前空間という名前Some.Mainのインターフェイスを指します。Someこれは、名前空間がSomeどこにも呼び出されていないためと考えられます。

幸いなことに、コンパイラはそのようにだまされておらず、あなたが言ったように、コードはうまく機能しているようです。

IntelliSenseがだまされている

于 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 に答える