目标sdk更改后Xamarin.Android构建错误

时间:2017-06-27 00:05:18

标签: c# android azure xamarin.android azure-mobile-services

在我的Xamarin.Forms解决方案的Android项目的MainActivity.cs中出现以下错误: CurrentPlatform is inacessbile due to its protection level

从OnCreate()内部的以下代码行开始,只有CurrentPlaftorm部分带下划线: Microsoft.WindowsAzure.MobileServices.CurrentPlatform.Init();

直到我从V6.0将MonoAndroid升级到v7.0并完成JDK 1.8之类的所有必要更新之前,我才收到此错误。 想知道是否有人可以解释这个错误的含义以及为什么专门为CurrentPlatform调用它。

我尝试在新项目中重新创建此错误,但是一旦我输入Microsoft.WindowsAzure.MobileServices.,它就可以使用CurrentPlatform选项而没有任何问题。

现在,使用调用WindowsAzure组件中的LoginAsync()的MobileServiceClient类型的行会在以下参数上引发两个错误:

await client.LoginAsync(context, "facebook");

但我现在收到以下两个错误: Argument 1: cannot convert from 'Android.Content.Context' to 'Microsoft.WindowsAzure.MobileServices.MobileServiceAuthenticationProvider' Argument 2: cannot convert from 'string' to 'Newtonsoft.Json.Linq.JObject'

当我更改Android Target SDK时,不确定为什么这两个代码区域会破坏,因为它们只是Microsoft.WindowsAzure组件的一部分。

1 个答案:

答案 0 :(得分:2)

  

当我更改Android Target SDK时,不确定为什么这两个代码区域会破坏,因为它们只是Microsoft.WindowsAzure组件的一部分。

根据您的描述,我认为它会引用您引用的Azure Mobile Client SDK版本。

  • 对于Azure Mobile Client SDK 3.1.0,您的客户端将从以下路径引用lib:

    Microsoft.Azure.Mobile.Client.3.1.0\lib\monoandroid\Microsoft.WindowsAzure.Mobile.Ext.dll

    您可以利用ILSpy检查LoginAsync的扩展方法,如下所示: enter image description here

对于Azure Mobile Client SDK 4.0.0-alpha-001,如果您的MonoAndroid> = 4.4,那么lib将在以下引用:

Microsoft.Azure.Mobile.Client.4.0.0-alpha-001\lib\monoandroid44\Microsoft.Azure.Mobile.Client.dll enter image description here

  • 对于Azure Mobile Client SDK 4.0.0,如果您的MonoAndroid> = 7.1,那么lib将在以下引用:

    Microsoft.Azure.Mobile.Client\4.0.0\lib\monoandroid71\Microsoft.Azure.Mobile.Client.dll

    我以前的项目是针对Android 6.0的,然后lib只会引用Microsoft.Azure.Mobile.Client.4.0.0\lib\netstandard1.4\Microsoft.Azure.Mobile.Client.dll,并且LoginAsync没有通过服务器流认证的扩展方法。

总之,从您的代码await client.LoginAsync(context, "facebook");开始,您使用的是Server-managed authentication,我建议您在不升级Android SDK版本或使用最新Azure Mobile的情况下使用Azure Mobile Client SDK 3.1.0客户端SDK 4.0.0并将您的Android SDK版本升级到7.1或更高版本。

此外,代码client.LoginAsync(MobileServiceAuthenticationProvider.Facebo‌​ok,{JObject token})正在使用Client-managed authentication,此时,您的应用可以独立联系身份提供商,然后在使用您的Azure移动后端登录时提供返回的令牌。