Visual Studio 2015 intellisense和模糊命名空间

时间:2016-08-17 11:13:00

标签: c# visual-studio intellisense

Xamarin.Auth项目已经解散,即源代码编译正常,在另一个Xamarin.Android更新后,它突然被破坏了。

事实证明,问题是在Mono.Android.dll(Xamarin.Android)被多个命名空间定义扩展后出现的。

我把问题解决了以下问题:

有一个dll#1(Mono.Android.dll):

namespace Xamarin.Android
{
    public class Class1
    {
    }
}

namespace Android.OS
{
    public class Class2
    {
    }
}

有一个dll#2(Xamarin.Auth.Android.dll):

namespace Xamarin.Auth
{
    //This does not compile. See the problem description below.
    public class User1 : Android.OS.Class2
    {
    }
}

Intellisense显示以下问题:

  
    

错误CS0234名称空间'Xamarin.Android'中不存在类型或命名空间名称'OS'(您是否缺少程序集引用?)

  

可以通过将后一个名称空间更改为其他名称或使用global::标识符来解决此问题:

namespace SomeOtherNamespace
{
    //This compiles ok.
    public class User1 : Android.OS.Class2
    {
    }
}

namespace Xamarin.Auth
{
    //This compiles ok.
    public class User1 : global::Android.OS.Class2
    {
    }
}

问题是:为什么intellisense不会发出Android名称空间分支在global::Xamarin.Androidglobal::Android之间不明确的警告?有什么好办法呢?始终使用global::命名空间标识符?

1 个答案:

答案 0 :(得分:1)

您可以使用global指令告诉编译器它应该从根目录评估命名空间,否则它会尝试从当前命名空间评估命名空间。使用global始终使用完全限定的命名空间名称,这就是为什么它在前缀时的作用。

另一种选择是使用别名:

using AOS = Android.OS;

namespace Xamarin
{
    public class User1 : AOS.Class2
    {
    }
}