4

我的场景:尝试将我们公司创建的应用程序的一小部分从本机代码(iOS 的 ObjC / Android 的 Java)移植到 C-Sharp。该项目将与我们的网络服务进行交互。这个项目的目标是弄清楚将我们的整个应用程序移植到 Mono 的可行性。

要创建 URL,我想使用String.Format(). 我认为将这个“服务层”放在可移植类库 (PCL) 中是一个明智的主意,因为我不希望这段代码跨平台更改。遗憾的是,似乎 String 库不适用于 PCL。

所以我的问题如下:

  1. 我认为 PCL 与“普通”库相比的主要优势在于它们不需要为不同的平台重新编译。这个假设正确吗?
  2. 这段经历让我觉得目前 PCL 相当有限。我应该尝试坚持使用 PCL 并解决这些问题,还是现在坚持使用“普通”库会更好?--- 我假设“普通”库有更多的功能。
4

2 回答 2

10

您目前可以在许多平台上使用 PCL,但它确实需要对您的设置进行一些小技巧。

这些 hack 列在http://slodge.blogspot.co.uk/2012/12/cross-platform-winrt-monodroid.html

一旦你得到这些工作,那么可用的功能就相当广泛了——它肯定包括像 String.Format 这样的东西

对于 PCL 配置文件不够广泛的情况,您可以使用多种技术来扩展它们 - 请参阅http://blogs.msdn.com/b/dsplaisted/archive/2012/08/27/how-to-make -portable-class-libraries-work-for-you.aspx。我通常使用的技术是使用 MvvmCross 插件——它们基本上是具有平台特定实现的 PCL 接口。这些插件通常处于“使蓝牙工作”级别,而不是 String.Format 级别

我在 WinRT、WP、WPF、MonoTouch 和 Mono for Android 上做了大量的 PCL 工作 - 请参阅http://slodge.blogspot.co.uk/p/mvvmcross-quicklist.html以获得许多 PCL 工作的链接。

确实,Xamarin 已经建议不要使用 PCL 几年了,但这种情况现在已经改变,对 PCL 的官方支持正在进行中 - 请参阅http://slodge.blogspot.co.uk/2013/02/the-未来是便携式的.html

从开发的角度来看——尤其是从使用重构和测试工具的角度来看——我毫不犹豫地建议您现在使用 PCL……尤其是对于 String.Format 级别的操作。然而,每个项目都是独一无二的......所以它并不总是正确的答案。


一个重要的注意事项:现在最好不要将 PCL 二进制文件重用到 MonoTouch 平台 - 现在,针对特定的 MonoTouch 库平台构建您的可移植库。见http://slodge.blogspot.co.uk/2013/01/almost-portable-binaries.html?m=1

于 2013-02-08T07:48:17.890 回答
2

也许你想看看其他人的努力,他们已经让 PCL 在相当程度上与 monotouch 和 monodroid 一起工作。

例如参见http://www.slideshare.net/cirrious/mvvm-cross-going-portable。您还可以在http://slodge.blogspot.co.uk/2012/09/mvvmcross-vnext-portable-class.html找到有关如何为 MVVMCross 设置 PCL 支持的说明。

Xamarin 最近致力于提供更强大的 PCL 支持,而不是人们不得不做出的一些变通办法,但值得付出努力。

于 2013-02-08T07:47:43.010 回答