WinRT基本上是一堆封装了一堆Win32 API的COM对象,以CLI兼容程序集的形式公开。
微软修改了他们的C++编译器,使其消耗和生成ECMA 335(即CLI)元数据,而不是更传统和(大部分)仅限于C++ / COM的MIDL或lib文件格式。微软还修改了他们的“Chakra”Javascript引擎,使其也能消耗和发出CLI元数据。
这意味着当针对WinRT时,Javascript和C++代码,以及.NET语言,当然,可以使用CLI兼容(即.NET)程序集,并且可以发出CLI兼容(即.NET)程序集。
因此,可以用C ++、任何.NET语言(即C#、VB.NET、F#、Iron *等)和Javascript编写WinRT代码。
WinRT API对于你来说应该非常熟悉,如果你曾经编写过任何.NET代码的话。设计WinRT时,Windows团队实际上寻求了.NET Framework设计团队的帮助和指导,因此过去11年中指导整个.NET框架团队和大部分.NET社区的相同设计准则已被应用于WinRT API。
WinRT是非常美丽的 :)
WinRT的主要影响是它使用类似的API替换了System.IO的文件、网络、流IO类,但仅支持异步IO。这意味着,除非你采取明确的措施,否则你将无法编写阻塞线程的应用程序,而它们在等待通过网络调用文件系统或外部系统返回。
这是一件好事。
幸运的是,C# v5和VB.NET v.next的新异步/等待特性以及针对C++的特定支持意味着您不必 fundamentally改变您在这个新的异步世界中编写代码的方式 - 通常只需要向调用异步API的方法签名添加“async”关键字,然后在每个异步API调用前使用'await'关键字前缀即可。
我强烈建议您观看
Anders Hejlsberg的会议,这应该使整个事情非常清楚。当您在那里时,我也鼓励您观看其他几个//BUILD会议,特别是
Harry Pierson关于使用C#和VB.NET使用WinRT的讲座以及Mads'有关
在C#和VB中简化异步操作的会议。
我还建议您查看我几周前发布的
改进的Win8 / WinRT平台架构图表,这应该使事情更加清晰。
关于.NET本身,正如我在上面的帖子中所表达的那样,.NET不会“消失”。虽然一些.NET API将被禁止在WinRT应用程序中(即阻止IO API),但您依赖的大多数API仍然存在并且完全可访问。
关于Silverlight:Silverlight是一个浏览器插件。它是WPF的修改子集,并提供了一些非常强大和有吸引力的功能。事实上,Silverlight XAML引擎已移动到核心Windows团队,并用于Windows 8中大多数Metro UI渲染 - 即使由操作系统自己!
最终结果是,除了更改一些“using”命名空间之外,大多数Silverlight代码都可以顺利运行,几乎没有任何修改。
BUILD available to watch here 上有大量的XAML相关会话。
关于向后兼容性,请尽可能:
- 尽可能将您想在WinRT以及.NET桌面应用程序、Windows Phone等中使用的代码隔离到可移植程序集中。
- 抽象出需要考虑特定平台依赖项的代码,并考虑手动加载它们或使用IoC将模块组合在一起。
坦白地说,我认为微软的工作并不是为每种情况编写每个框架。有许多来自各种人的各种MVVP方法/框架,都有优点和缺点。如果您找不到一个,那就创建一个并将其放在GitHub上,成为著名人物;)
但最重要的是,没有什么能阻止您下载并尝试Win8 Consumer Preview & Dev11 Beta。去获取它们并尝试它们-我认为您会发现它们非常清新:)
希望对您有所帮助。
更新#1,针对EF、WCF等的特定支持:
你可以在此处详细了解
WinRT API surface area, 此处枚举了
核心WCF API。
但是请注意,微软强烈建议不要使用网络通信来在Metro应用程序和其他Metro应用程序之间或同一台计算机上的桌面应用程序/服务之间进行通信。阅读
此SO问题和Kate Gregory的答案-她链接到了一段详细讨论此场景的视频。
如果您想与离线网络服务通信,则有多种选择,包括WCF,套接字等。
关于RIA:微软目前表示,如果您需要数据,您将需要通过服务获取,而不是直接从数据库获取。Metro没有ADO.NET,建议通过OData、JSON、XML/HTTP等方式呈现数据。数据作为服务非常适合RIA场景,因此我预计RIA将得到很好的支持,特别是对于Metro应用程序。这里有一个关于这个主题的BUILD会议,可能会更加详细地说明。
只有您自己可以确定您的具体情况是否受WinRT支持。我认为您最好的选择是下载相关文件并开始探索。
更新2:根据P&P的更新路线图和指导:
P&P最近发布了一份新的路线图和指南,用于构建Windows RT / Windows 8 "store" / "modern" LOB应用程序。
这份指南包括
Prism/Kona 的更新,还包括
EntLib6 & Unity3(IoC)。我鼓励对此感兴趣的人学习已发布的材料和参考应用程序 - 那里有很棒的东西 :)