我现在应该如何使用带PCL或不带PCL的Azure移动服务?

我现在应该如何使用带PCL或不带PCL的Azure移动服务?,azure,xamarin,portable-class-library,Azure,Xamarin,Portable Class Library,我更新到了Xamarin的最新版本,其中“完全支持”PCL。 我现在如何使用Azure移动服务 如果我创建PCL库并尝试使用NuGet添加它,它将无法安装“Newtonsoft.Json 5.0.8”,因为它需要缺少“portable-net45+wp80+MonoAndroid10+MonoTouch10” 如果我创建简单的android库并从组件中添加Azure,则生成例外: System.InvalidOperationException:Windows Azure移动服务 找不到当前平台

我更新到了Xamarin的最新版本,其中“完全支持”PCL。 我现在如何使用Azure移动服务

如果我创建PCL库并尝试使用NuGet添加它,它将无法安装“Newtonsoft.Json 5.0.8”,因为它需要缺少“portable-net45+wp80+MonoAndroid10+MonoTouch10”

如果我创建简单的android库并从组件中添加Azure,则生成例外:

System.InvalidOperationException:Windows Azure移动服务 找不到当前平台的程序集。确保当前


确保已安装。这将解决Newtonsoft.Json不会安装在PCL中的问题


对于Azure移动服务,如果您仍然有问题,我建议您按照中的步骤下载预配置的示例项目。

首先,确保您使用的是NuGet或Xamarin组件的1.1.5或更高版本,因为以前的版本在PCL支持方面存在一些问题

有关在PCL中使用移动服务的分步指南,请参阅

如果将或for Azure移动服务安装到Android应用程序中,您会发现它添加了以下引用(以及其他引用):

  • Microsoft.WindowsAzure.Mobile.dll
  • Microsoft.WindowsAzure.Mobile.Ext.dll
第一个程序集是PCL,第二个程序集具有特定于平台的实现(这就是您在上面的错误消息中缺少的)

用于移动服务的NuGet软件包为Xamarin.iOS和Xamarin.Android定义了特定的平台目标,因此如果您使用的是Visual Studio,您可以选择仅使用NuGet并完全跳过Xamarin组件


由于BCL NuGet包(HttpClient、BCL.Build等)与Xamarin的交互方式存在一些缺陷,您需要注意一些解决方法。有关必要的步骤,请参阅上面的教程。

请确保您已致电

CurrentPlatform.Init(); 

在实例化移动服务客户端之前

以下是我如何让移动服务v1.3.2在新的Xamarin.Forms PCL项目中工作的:

  • 将“移动服务”安装到共享项目“软件包”文件夹中,如下所示: 以及.iOS和.Droid“包”文件夹
  • 删除.iOS/.Droid文件夹中的重复引用: “System.Runtime”、“System.IO”、“System.Threading.Tasks”
  • 请记住将
    CurrentPlatform.Init();
    添加到.iOS中的'AppDelegate.cs' 项目和Droid项目中的“MainActivity.cs”

  • Paul Batum做了一个很好的Xamarin PCL应用示例,显示了iOS和Android应用程序之间的同步:

    非常感谢您的回答。PCL是目前创建跨平台库的唯一正确方法吗?我在旧库中有一个特定参考平台。我应该使用类似“PCL->Android平台库->Android应用程序”的依赖项吗“现在?顺便说一句,我被迫重新安装NuGet,没有任何updates@xakzPCL不是创建跨平台库的唯一方法,您仍然可以为每个平台创建单独的库,并与链接文件共享代码。我在这里讨论了一些优缺点:您不能从PCL引用平台库(因为它不能在所有平台上运行)。要解决这个问题,请使用抽象模式。请看这里:等一下,我不明白。你的意思是我现在不能将Azure移动服务安装到我的“portable-net45+wp80+MonoAndroid10+MonoTouch10”PCL库中吗?我应该使用普通的旧方法来链接项目(文件)和来自的引用吗“组件库"然后呢?不,你不需要链接的项目文件。我刚刚发布了一个教程,可能有助于澄清问题。如果你有更多问题,请发电子邮件给我pbatum@microsoft.com酷,这非常有用。谢谢!你能帮我解决另一个问题吗@paul。如果我使用你的项目或从Azure获取项目,它工作得非常好,但如果我创建新的android项目,添加组件和相同的代码失败,出现异常:System.Security.Cryptography.CryptographyException:Store Root不存在。我想我遗漏了一点。我自己没有看到这个错误,但我做了一个快速搜索,也许你遇到了这个问题?另外,如果你使用的是Visual Studio,你可能会更幸运地使用它e Azure移动服务包直接从nuget获得,而不是添加Xamarin组件。至少这是我的经验。你不是说第1步中的PCL而不是共享项目吗?因为共享项目目前不支持组件。是的,澄清一下,我指的是没有后缀.iOS或.Droid的实际文件夹。我它是您“共享”跨平台工作的c#&xaml(Xamarin.Forms)的地方。如果您得到一个错误,大意是“类型System.Net.HttpMessageHandler是在未引用的程序集中定义的”在完成上述步骤后,在您的iOS项目中,使用“添加引用”选项添加对System.Net.Http的引用。它看起来像是安装了HttpClient Nuget软件包,但遗憾的是它与iOS项目不兼容。您必须改用“添加引用”中的mono软件包。
    CurrentPlatform.Init();