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.Facebook,{JObject token})
使用 Client-managed authentication,此时,您的应用程序可以独立联系身份提供者,然后在登录您的 Azure 移动后端时提供返回的令牌。
在我的 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.Facebook,{JObject token})
使用 Client-managed authentication,此时,您的应用程序可以独立联系身份提供者,然后在登录您的 Azure 移动后端时提供返回的令牌。