为了解决.NET/Mono 生态系统的平台分化问题,微软开发了一个名为 Portable Library Tools 的扩展工具。这个工具允许相同的编译好的类库运行在.NET 4.0、Silverlight、Xbox 360 和 Windows Phone 7 上。微软正在和 Mono 合作为 MonoTouch 和 Mono for Android(译注:原文此处为 MonoDroid,但由于版权方面的问题,MonoDroid 已经更名为 Mono for Android)提供支持。
在创建一个新的“可移植类库”时,开发者需要决定这个类库将会运行在哪些框架上。一旦做出了选择,只有那些在所有选择的平台上都能用的 API 才可以使用。具体可用的类和方法列表可以在 Visual Studio 的 Object Browser 里看到。
Portable Library Tools 要求项目引用一组特殊的类库,而不是通常和平台相关的那些类库。受平台支持的API 列表和 API 的更改可以在 MSDN 上找到。Mono for Android 和 MonoTouch 的 API 没有显示出来,根据 David M. Kean 的说法,这些会在以后提供支持。
这个工具并非支持所有.NET/Mono 平台。举个例子,“没有任何计划为.NET Compact(在 Windows Phone 和 Xbox 之前的)或者.NET Micro 框架提供支持”。也不会为旧版本的全功能的.NET 框架提供支持,因为这需要对运行时进行很大的改动。
这个工具的一个重要限制是你只能访问所有选择的平台都支持的 API。这意味着你无法像为每个目标平台创建独立的 DLL 那样,通过编译器常量有选择性地启动某些特性。微软正在研究通过反射和迟绑定来“开启”额外特性的可行性,但至今没有任何明确的计划。
评论