Visual Studio 11 Beta 深藏之精华――.Net 便携式类库
[原文发表地址] Hidden Gems in Visual Studio 11 Beta - .NET Portable Class Libraries
[原文发表时间] 2012-04-05 6:16 PM
我发现在简化了先前一些困难任务的下一版本的VS中有很多微妙但是很重要的新事物。例如,有 .NET Framework,.NET也存在于Silverlight, Windows Phone和Xbox等平台中。
假设你创建了具有单目标框架的普通类库。但是,如果你正在开发一个多平台应用程序并且想要最大限度地重用代码,你可能就遇到问题了,因为你可能没有小平台上可用的所有库。
因此,便携式类库应运而生。你可以通过Visual Studio 2010 的扩展来获取便携式类库,这些类库也会内置于Visual Studio 11 Beta中。
这些便携式类库(PCLs)将生成托管程序集,可以引用于Windows Phone 7,Silverlight,Microsoft .NET Framework和Xbox 360平台。这确实有助于最大限度地重用代码和减少多目标应用程序解决方案中的项目数量。
我在标题为.NET 版本控制和多目标—— .NET 4.5 是对 .NET 4.0的内部升级的贴子中谈过一点多目标。在编译之前,Visual Studio有足够的灵敏度,它会告诉你哪些APIs是可用的。VS的编译器知道这些,其智能感知功能也知道这些。C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\目录下的程序集引用,对你很有帮助。
假设你创建了一个新的便携式类库,右键单击它,然后点击属性。你可以定位特定的框架,这一类库的生成系统和智能感知就会作出相应的调整。从而某些设备上只具有某些类库。例如,在 Xbox 360 中没有XML序列化,在Windows Phone中有WCF。
Bill Kratochvil在MSDN杂志上有一篇文章,其中包括针对Windows Phone 7,Silverlight和WPF共享库的项目源。David Kean本月在MSDN杂志上就如何创建一个持续性客户使用便携式类库发表了一篇文章。
必须记住,便携式类库是受到设计的约束的。在项目中,你正在以最低的标准去使这些你可以使用的资源最大化。在题为便携式类库的MSDN文章里有一个表格,显示了各个平台上可以使用的类库。例如,你可以通过Windows,地铁样式aopps以及Silverlight和Windows Phone来完成MVVM的工作。
下面是David Kean给我的一些好的建议:
使用便携式有一事值得一提,那就是这并不意味着我们不能使用平台的特定功能,只需要花一点时间来考虑依赖项。例如,不是用一个低级别处理持久层使用的类文件APIs(在Phone,Silverlight等里面适用到或者是无效的),而是采取一种抽象的方式来实现,例如流,从平台特定的项目获取这些传递。或者通过平台适配器(来自我的文章),或者注入抽象适用你喜欢的IoC容器(来自我刚发布的Autofac便携式版本)
当查看帮助,智能感知或者生成编译时,你从中得到了帮助,MSDN帮助还显示了哪些适用于便携式类库,以为你提供帮助。
BCL博客提到,他们也正在和Mono项目成员们讨论这一点。使得Mono项目在Android和其它框架下也是适用的,这将会是一件很棒的事情。我很兴奋地发现,这项工作正在进行,即使它一直在酝酿超过了一年。
有些人,像我的朋友Rowi这样拥有一个大型的Windows Phone 7应用程序,或者像MetroTwit这样的网站,拥有一个大型的WPF应用程序。我想知道便携式类库如何改变其应用程序的体系结构,清除生成和重新使用解决方案,以成为他们意想不到的体系结构。