我正在尝试在Xamarin上构建一个针对多个平台但使用rx的应用程序 . 到目前为止,我已经创建了一个核心PCL,我想使用rx,但是当我尝试导入rx 2.1 nuget包时,我收到以下错误:
您正在尝试将此软件包安装到以“portable-net40 win sl50 wp80 MonoAndroid10 MonoTouch10”为目标的项目中,但该软件包不包含任何与该框架兼容的程序集引用或内容文件 . 有关更多信息,请与软件包作者联系 .
我知道xamarin商店中有一个rx组件,但似乎我不能将它添加到我的PCL中 .
在我看来,理想情况下我想要PCL中的核心rx库,但是应该在特定于平台的应用程序实现中导入特定于平台的调度程序 .
目前最好的方法是什么?
注:我知道在其他问题中已经触及了这个问题,但答案是在Xamarin发布通道PCL支持之前 .
编辑:
我已经将我的PCL修改为目标.net 4.5(并删除了silverlight) . 我现在可以拉入rx nuget包但是我得到一个构建警告,它无法解析'system.runtime.interopservices.windowsruntime' .
3 回答
目前,Xamarin Stable无法构建PCL(Alpha刚刚获得它,但我没有尝试过它) . 现在只需使用多个csproj文件(例如,参见https://github.com/paulcbetts/starter-mobile)
看看Paul Betts's ReactiveUI on GitHub . 我个人没有做任何Xamarin开发,但我知道该项目使用Rx并且被组织起来在包括Xamarin在内的多个平台上运行 - 它可能会给你正确的方法 .
Paul Betts也在另一个问题中提到过这个问题:Is Reactive Extensions 2.1 PCL compatible with Xamarin?
随着稳定的发布(Xamarin.Android 4.10.1),我发现它仍然很奇怪 . 我有以下设置:
(1)具有配置文件49的PCL-Library(.net 4.5,Windows 8,Xamarin Android / iOS) .
(2)Xamarin.Android App引用(1) .
如果将Rx从Nuget添加到两个项目,它将“targetFramework =”portable-net45 wp80 MonoAndroid10 MonoTouch10“添加到packages.config并添加对”packages \ Rx-Core.2.1.30214.0 \ lib \ Portable-Net45 WinRT45 WP8 \的引用System.Reactive.Core.dll“到两个项目 .
(1)然后构建好,但(2)没有(缺少system.runtime.interopservices.windowsruntime,如在初始问题中) .
然而,将(2)中的Rx路径更改为“packages \ Rx-Core.2.1.30214.0 \ lib \ net40 \ System.Reactive.Core.dll”仍然有效,但(2)仍然引用(1) .
我看了一下Rx代码 . 对System.Runtime.InteropServices.WindowsRuntime的引用由#if HAS_WINRT保护,所以我猜想依赖于WinRT的库不应该首先被NuGet放入Xamarin.Android项目中 .
我可以手动更改引用,不知道如果Rx获得更新会发生什么 .
但为什么在PCL项目(1)中使用错误的dll并让(2)引用(1)可以呢?