如何访问真实Android命名空间?解决项目命名导致的权限类引用冲突
解决Xamarin Android中命名空间冲突:强制引用系统Android.Content命名空间
这种命名空间冲突的问题我之前也碰到过,尤其是当项目命名和系统自带的命名空间重叠时,编译器很容易“认错”类型。针对你遇到的Android.Content.PM.Permission[]被解析为项目自身命名空间类型的问题,给你几个可行的解决办法:
方法1:使用全局命名空间前缀
直接在类型前加上global::前缀,强制编译器从全局范围查找系统的Android命名空间,而不是当前项目的。修改后的方法代码如下:
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] global::Android.Content.PM.Permission[] grantResults) { Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults); base.OnRequestPermissionsResult(requestCode, permissions, grantResults); }
方法2:给系统Android命名空间设置别名
在代码文件的顶部(using语句区域),给系统的Android命名空间设置一个别名,之后用别名来引用系统类型,避免和项目命名空间混淆:
// 顶部添加别名 using AndroidSystem = Android; // 方法中使用别名 public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] AndroidSystem.Content.PM.Permission[] grantResults) { Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults); base.OnRequestPermissionsResult(requestCode, permissions, grantResults); }
方法3:调整项目命名空间(根源解决)
如果项目还处于初期阶段,修改成本不高的话,可以把项目命名从MyProject.Cient.Android调整为MyProject.Client.MobileAndroid或者其他不会和系统Android命名空间重名的名称。这样从根源上避免命名冲突,后续开发也不会再遇到类似问题。
为什么会出现这个问题?
因为你的项目命名空间包含Android后缀,编译器在解析类型时会优先在当前项目的命名空间层级中查找匹配的类型,所以误把系统的Android.Content.PM.Permission当成了项目自身命名空间下的类型。
内容的提问来源于stack exchange,提问作者Álvaro García
相关产品推荐
相关产品推荐

