5

我正在尝试在 Xamarin 上构建一个针对多个平台但使用 rx 的应用程序。到目前为止,我已经创建了一个我想使用 rx 的核心 PCL,但是当我尝试导入 rx 2.1 nuget 包时,我收到以下错误:

您正在尝试将此包安装到以“portable-net40+win+sl50+wp80+MonoAndroid10+MonoTouch10”为目标的项目中,但该包不包含任何与该框架兼容的程序集引用或内容文件。有关详细信息,请联系包作者。

我知道 xamarin 商店中有一个 rx 组件,但我似乎无法将它添加到我的 PCL 中。

在我看来,理想情况下我想要 PCL 中的核心 rx 库,但是应该在特定于平台的应用程序实现中导入特定于平台的调度程序。

目前最好的方法是什么?

nb 我知道这已经在其他问题中有所提及,但答案早于 Xamarin 中的发布通道 PCL 支持。

编辑:

我已将我的 PCL 修改为针对 .net 4.5(并删除了 silverlight)。我现在可以拉入 rx nuget 包,但我收到一个构建警告,它无法解析“system.runtime.interopservices.windowsruntime”。

4

3 回答 3

4

在 GitHub 上查看Paul Betts 的 ReactiveUI 。我个人没有做过任何 Xamarin 开发,但我知道该项目使用 Rx,并且可以在包括 Xamarin 在内的多个平台上运行——它可能会给你正确的方法。

Paul Betts 在另一个问题中也提到了这一点:Reactive Extensions 2.1 PCL 是否与 Xamarin 兼容?

于 2013-11-08T12:23:06.750 回答
2

目前,Xamarin Stable 无法构建 PCL(Alpha刚刚得到它,但我还没有尝试过)。目前只需使用多个 csproj 文件(参见https://github.com/paulcbetts/starter-mobile示例)

于 2013-11-09T20:33:06.247 回答
2

使用稳定版本(Xamarin.Android 4.10.1),我发现它仍然很奇怪。我有以下设置:

(1) 配置文件 49 的 PCL 库(.net 4.5、Windows 8、Xamarin Android/iOS)。
(2) Xamarin.Android App 引用(1)。

如果从 Nuget 将 Rx 添加到两个项目,它会将“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) builds fine then, but (2) doesn't (missing system.runtime.interopservices.windowsruntime, as in the initial question).

Changing the Rx-path in (2) to "packages\Rx-Core.2.1.30214.0\lib\net40\System.Reactive.Core.dll" however works, though (2) still references (1).

I had a look into the Rx code. References to System.Runtime.InteropServices.WindowsRuntime are guarded by #if HAS_WINRT, so I guess a library that relies on WinRT shouldn't have been put into a Xamarin.Android project by NuGet in the first place.

It's okay for me to change references manually, don't know what will happen if Rx gets an update.

But why is it ok to have the wrong dll in the PCL-project (1) and let (2) reference (1) ?

于 2013-11-26T12:46:15.973 回答