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.Android
和global::Android
之间不明确的警告?有什么好办法呢?始终使用global::
命名空间标识符?
答案 0 :(得分:1)
您可以使用global
指令告诉编译器它应该从根目录评估命名空间,否则它会尝试从当前命名空间评估命名空间。使用global
始终使用完全限定的命名空间名称,这就是为什么它在前缀时的作用。
另一种选择是使用别名:
using AOS = Android.OS;
namespace Xamarin
{
public class User1 : AOS.Class2
{
}
}