2016-08-17 111 views
1

Xamarin.Auth项目打破了,即源代码编译正常,之后又一次Xamarin.Android更新它突然中断。Visual Studio 2015 intellisense和模棱两可的命名空间

事实证明,在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 
    { 
    } 
} 

智能感知显示了以下的问题:

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

这可以是固定的,通过改变后者命名空间别的东西,或使用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 
    { 
    } 
} 

的问题是:为什么不给智能感知一个警告,Android命名空间分支global::Xamarin.Android和之间的暧昧0?有什么好办法呢?总是使用global::命名空间标识符?

回答

1

您可以使用global指令来告诉编译器它应该从根开始评估命名空间,否则它会尝试从当前命名空间计算相对命名空间。使用global将始终使用完全限定名称空间名称,所以这就是为什么它以前缀形式工作的原因。

另一种选择是使用别名:

using AOS = Android.OS; 

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

我不是清楚地表明此变通办法自己的问题吗? –

+0

对不起。我错过了。更新。 –

+0

感谢别名的想法,我会考虑这一点。有没有办法让Visual Studio在内联自动化命名空间时始终插入'global ::'? –

相关问题