翻译自:http://blogs.msdn.com/b/dotnet/archive/2012/04/17/net-for-metro-style-apps.aspx
.net现在是微软几个平台的核心了,每个平台都有基于.net特定的子集,关于API覆盖面的制作已经融入了很多想法,很多人问到在metro下哪些.net类可用,下面CLR核心框架组的PM将会回答。
开发者预览版和客户预览版已经发布,很多开发人员开发win8的时候问到metro下可用的.NET类,这关系代码到移植到win8 metro的时候要重写多少代码,我们也扪心自问过这个问题。
后面会列出一个可用列表,这里主要讨论一些我们决定其可用的想法和原则,和一些.net类和metro类的关系。
设计目标:
开始做这项工作之前,我们意识到让开发者更容易和技术实现上的两难,metro应用允许开发者通过所有win8设备提供一些强制的终端用户体验,为了达到目的,windows做了很多改变,有一些影响到了我们的设计。最大的变化是 windows runtime是一套新的接口,能被C#,C++,VB,调用,我们组的任务就是让.net开发人员自然而然地同时调用.net类和windows runtime类。windows runtime组从相反的方向做着相同的工作。以下几点是我们的目标:
避免.net类和win runtime类中有重复的功能
明确.net类的重点
让.net开发人员感觉到很方便。
方便移植C#、VB代码
Figure 1: .NET Framework profiles in context
设计配置
为了给metro设计一个新的类库,从现有的子集中削减并扩展一些类,上图是一个图表用来说明关系的。图中小点的圈是.net的配置,交叉点是共用的,可以认为metro应用也是一个.net类库的子集,并且和其他子集共享一些共通类。基于这个图,我们从完整的.net类库中为windows phone选择一些类,因为wp应用和metro应用很像。
选择类的过程
为了达到之前讨论的目的,我们建立了一个严格的挑选流程,我们要确认每一个API符合以下要求:
1,这个API在Metro中可用吗?答案并非显而易见,比如asp.net的api明显与Metro开发关系不大,但是控制台api可能有用(例如测试的时候)。当有疑虑的时候,我们先自问我们是否需要给出这些api,然后移除一些不会用到的api,例如在metro中用路径操作文件是不支持的,因为文件存取是另一个代理线程调用的。
2,这个API过时了吗?包括不好用的,或者不符合指导规范的。
3,这个API和.net类的重复了么?重复的话用的时候就得选择,选择一般都是随便做的,这样就不能很好的分享代码,因为你可能选择了不同的函数。
下图是量化的图表
.NET for Metro style apps | Windows Phone 7.1 | .NET Framework 4.5 | |
Namespace | 72 | 95 | 447 |
Type | 1,246 | 1,788 | 14,936 |
Member | 15,674 | 20,291 | 217,166 |
Table: API surface counts, by .NET Profile
关于考虑的流程,可以看这个文章 A .NET developer's view of Windows 8 app development 。
关于移植.net代码 Bringing existing managed code into Metro style apps,
.NET for Metro style apps overview
converting your existing .NET Framework code.