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

11

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

如果我创建了一个PCL库并尝试通过NuGet添加它,则无法安装“Newtonsoft.Json 5.0.8”,因为它需要“portable-net45+wp80+MonoAndroid10+MonoTouch10”,而这些文件是缺失的。

如果我创建一个简单的Android库并从组件中添加Azure,它会生成异常:

  

System.InvalidOperationException:未找到当前平台的Windows Azure Mobile Services程序集。确保...

结束

 public static MobileServiceClient MobileService = new MobileServiceClient(
    "https://no-link-here.azure-mobile.net/",
    "no-key-here");    
4个回答

6

请确保您已经调用了

CurrentPlatform.Init(); 

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

此外,如果您正在使用Visual Studio,则直接从nuget使用Azure移动服务包可能比添加Xamarin组件更好。至少这是我的经验。 - Timothy Lee Russell

6

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

有关在PCL中使用移动服务的逐步指南,请参见this tutorial

如果您将Azure移动服务的Xamarin ComponentNuGet package安装到Android应用程序中,则会发现它添加了这些引用(以及其他引用):

  • Microsoft.WindowsAzure.Mobile.dll
  • Microsoft.WindowsAzure.Mobile.Ext.dll
第一个组件是 PCL,第二个组件具有特定于平台的实现(这就是上面错误消息中所缺少的内容)。
Mobile Services 的 NuGet 包为 Xamarin.iOS 和 Xamarin.Android 定义了特定的平台目标,因此如果您使用 Visual Studio,则可以选择仅使用 NuGet 并完全跳过 Xamarin 组件。
由于 BCL NuGet 包 (HttpClient、Bcl.Build 等) 与 Xamarin 交互时存在一些错误,因此您需要了解一些解决方法。请参阅上面的教程获取必要的步骤。

1
不需要链接的项目文件。我刚刚发布了一个教程,可能有助于澄清问题。如果您有更多问题,请发送电子邮件至pbatum@microsoft.comhttps://github.com/paulbatum/mobile-services-xamarin-pcl - Paul Batum
很遗憾,这个小技巧对我没有帮助 :( - xakpc
你能给我更多有关你所采取的步骤和使用的代码的细节吗?如果可能的话,我想尝试复制这个错误。请将它们放在Pastebin / Gist上。 - Paul Batum
看起来当在PCL中包含WP8时,配置文件不再是profile7,因此组件的DLL无法被引用。 - Liel
我们发布了新版本(1.1.5)的NuGet包和Xamarin组件,我已相应地更新了上面的答案。 - Paul Batum
显示剩余5条评论

4

以下是我如何在新的Xamarin.Forms PCL项目中使用Mobile Services v1.3.2:

  1. 将'Mobile Services'安装到共享项目的'Packages'文件夹以及.iOS和.Droid的'Packages'文件夹中。
  2. 在.iOS / .Droid文件夹中删除重复的引用:"System.Runtime","System.IO"和"System.Threading.Tasks"。
  3. 记得在.iOS项目的'AppDelegate.cs'和.Droid项目的'MainActivity.cs'中添加CurrentPlatform.Init();

Paul Batum已经做了一个不错的Xamarin PCL示例应用,展示了iOS和Android应用之间的同步:https://github.com/paulbatum/fieldengineerlite


1
在第一步中,你是不是指的是 PCL 而不是 Shared Project?因为目前 Shared Projects 不支持组件。 - Mittchel
是的,澄清一下,我指的是没有后缀“.iOS”或“.Droid”的实际文件夹。这是您“共享”C#和XAML(Xamarin.Forms)的跨平台工作的地方。 - David Douglas
如果在按照上述步骤后,在您的iOS项目中遇到“类型System.Net.HttpMessageHandler在未引用的程序集中定义”的错误,请使用“添加引用”选项添加对System.Net.Http的引用。看起来HttpClient Nuget包已安装,但不幸的是它与iOS项目不兼容。您必须使用“添加引用”中的mono版本。 - smlync

1

请确保已安装NuGet的最新版本。这样就可以解决Newtonsoft.Json无法在PCL中安装的问题。

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


非常感谢您的回答。目前,PCL是创建跨平台库的唯一适当方式吗?我在旧库中有一个特定于平台的引用。现在我应该使用依赖项,例如“PCL-> Android平台库-> Android应用程序”吗? - xakpc
顺便说一句,我被迫重新安装NuGet,因为没有任何更新。 - xakpc
@xakz PCL并不是创建跨平台库的唯一方式,您仍然可以为每个平台创建单独的库,并通过链接文件共享代码。我在这里讨论了一些优缺点:https://dev59.com/6mYr5IYBdhLWcg3wR4Us#13808655您无法从PCL引用平台库(因为它不能在所有平台上工作)。为解决此问题,请使用抽象模式。请参见此处:http://blogs.msdn.com/b/dsplaisted/archive/2012/08/27/how-to-make-portable-class-libraries-work-for-you.aspx - Daniel Plaisted

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接