【问题标题】:Portable Class Library vs Platform-Specific Releases可移植类库与特定于平台的版本
【发布时间】:2012-09-20 16:05:00
【问题描述】:

随着Portable Class Library 的引入,开发人员可以发布跨多个平台兼容的单个库。这样做的缺点是 PCL 必须将自身缩减为在所有指定平台上兼容的最低通用类集。

如果您想发挥特定平台的优势和功能,(或者如果您想访问仅存在于某些平台中的类),我认为您必须执行以下操作之一:

  1. 将“基础”类集发布为可移植类库,并附带构建在其上的特定于平台的库。
    • 一个例子可能是 MVVM 库:将通用基类发布为单个可移植类库 - 名为“MyCustomMvvm.dll” - 并以“MyCustomMvvm.Extras.WPF.dll”和“ MyCustomMvvm.Extras.WP7.dll”等... 或:
  2. 为每个平台保留一个单独的项目,使用“链接”源文件和#if 语句有条件地编译特定于平台的功能。
    • 对于此示例,所有库都将具有相同的文件名(“MyCustomMvvm.dll”),但每个平台都有一个单独的副本,使用解决方案中特定于平台的项目构建。

我的问题是:只有这两个选项吗?有没有明显“更好”的选择?

【问题讨论】:

  • 我认为可移植类库是最好和最干净的方法。但是,是的,这当然只适用于不使用平台特定功能的通用代码。
  • 这在很大程度上取决于您的项目。你有很多平台特定的功能吗?在您的用例中,最低的类集是一个很大的限制吗?如果您想稍后针对其他未列出的平台,例如 monodroid/monotouch,该怎么办?

标签: .net multiplatform portable-class-library


【解决方案1】:

查看http://blogs.msdn.com/b/rxteam/archive/2012/03/12/reactive-extensions-v2-0-beta-available-now.aspx,特别是“迈向便携式图书馆世界”部分。 Rx 针对许多不同的运行时,因此它是一个很好的示例用例。他们通常会按照您建议的选项 1 执行操作,并使用 NuGet 来管理大量分发。

NuGet 2.1 正在进行更改以帮助完成这项工作:http://nuget.codeplex.com/discussions/391121

您的第二个建议是 MVVM light 如何按照 http://blogs.msdn.com/b/dsplaisted/archive/2012/08/27/how-to-make-portable-class-libraries-work-for-you.aspx 执行此操作,除非没有理由将所有程序集命名为相同。

我不确定是否有可靠或有用的替代方案。

【讨论】:

  • 我注意到文章中提到的一句话:“Rx for Portable Library 包括 .NET Framework 4.5 和 .NET for Metro 风格应用程序。”似乎 PCL 要求他们放弃对某些平台的支持,至少是暂时的。
  • 那是因为 PCL 不包括 IObservable 用于 SL4、SL5 和 Win Phone 7.x 参见 skydrive.live.com/… 链接自 blogs.msdn.com/b/dsplaisted/archive/2012/08/27/… 令人惊讶的是 PCL 在不同平台上有不同的库我相信这有点反直觉。
  • 能否通过您的意思澄清“PCL 在不同平台上有不同的库”?
  • 根据 Daniel Plaisted 文章(在这种情况下,它被证明是获胜链接),看起来我的“#2 选项”是 MVVM Light 过去的做法,现在他们'重新希望朝着更适合 PCL 的实现迈进。迁移到 PCL 的答案似乎是“在抽象方面做得更好”。
  • @DavidKean 我的意思是不同的目标平台有不同的类可用。当您创建 PCL 库时,您决定要包含哪些目标以及可供您使用的目标是所有目标平台中最不常见的分母。我的直觉是 PCL 在所有平台上都是相同的。检查该链接以获取所有类及其在每个目标中的可用性的巨大电子表格。
猜你喜欢
  • 1970-01-01
  • 2013-12-14
  • 2014-10-22
  • 1970-01-01
  • 2014-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多