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

Xamarin.Android Build Error after target sdk change

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

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

直到我将我的 MonoAndroid 从 v6.0 升级到 v7.0 并进行了所有必要的更新,如 JDK 1.8,我才收到此错误。 想知道是否有人可以解释此错误的含义以及为什么专门为 CurrentPlatform 调用它。

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

现在还有一行使用 MobileServiceClient 类型从 WindowsAzure 组件调用 LoginAsync() 的行在参数上引发了两个错误,这些错误曾经是:

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 组件的一部分。

Not sure why these two areas of code broke when I changed my Android Target SDK as they were just part of the Microsoft.WindowsAzure components.

根据您的描述,我认为这是由于您引用的 Azure Mobile Client SDK 版本所致。

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

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

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

而对于 Azure Mobile Client SDK 4.0.0-alpha-001,如果您的 MonoAndroid >= 4.4,则该库将参考:

Microsoft.Azure.Mobile.Client.4.0.0-alpha-001\lib\monoandroid44\Microsoft.Azure.Mobile.Client.dll

  • 对于Azure Mobile Client SDK 4.0.0,如果你的MonoAndroid >= 7.1,那么该库将参考:

    Microsoft.Azure.Mobile.Client.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,我建议您可以使用 Azure Mobile Client SDK 3.1.0 而无需升级您的 Android SDK 版本或使用最新的 Azure 移动客户端 SDK 4.0.0 并将您的 Android SDK 版本升级到 7.1 或更高版本。

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