可移植类库与特定于平台的版本

时间:2012-09-28 18:43:35

标签: .net multiplatform portable-class-library

随着Portable Class Library的引入,开发人员可以发布一个兼容多个平台的库。这方面的缺点是PCL必须将自身减少到在所有指定平台上兼容的最低公共类集。

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

  1. 将一组“基础”类作为可移植类库发布,并在其上构建基于特定于平台的库
    • 一个例子可能是MVVM库:将公共基类作为单个可移植类库发布 - 名为“MyCustomMvvm.dll” - 并以“MyCustomMvvm.Extras.WPF.dll”和“MyCustomMvvm.Extras.WPF.dll”的形式发布一些其他平台功能。 MyCustomMvvm.Extras.WP7.dll,“etc ... OR:
  2. 为每个平台保留一个单独的项目,使用“链接”源文件和#if语句有条件地编译特定于平台的功能。
    • 对于此示例,所有库都具有相同的文件名(“MyCustomMvvm.dll”),但每个平台都有一个单独的副本,使用解决方案中特定于平台的项目构建。
  3. 我的问题是:那是唯一的两种选择吗?是否有一个明显“更好”的选择?

1 个答案:

答案 0 :(得分: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指示灯如何按照http://blogs.msdn.com/b/dsplaisted/archive/2012/08/27/how-to-make-portable-class-libraries-work-for-you.aspx进行操作,除非没有理由将所有程序集命名为相同。

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