silverlight - 新Windows8 Runtime ( WinRT / 窗口应用商店应用) 和Silverlight和WPF进行比较?

  显示原文与译文双语对照的内容

我正在尝试让我的头绕过新的Windows 8运行时,它用于创建地铁风格应用。 我知道你可以在XAML上使用它,它基于. NET,所以 C# 和 VB.Net 可以用来编写应用程序,但是,它似乎与 HTML,CSS,DOM和JavaScript有关。

有人能解释一下它在几个段落中的含义,.NET 用户界面程序员可以理解? ( 我丢失了一些需要理解的"密钥")


我们都知道,WPF和Silverlight和Winforms等都将在 Windows 8上至少在Intel系统下继续工作,所以请不要告诉我。

时间:

在最低级别上,WinRT是在ABI级别定义的对象模型。 它使用了com作为基础( 所以每个WinRT对象实现 IUnknown 并执行 refcounting ),并从那里构建。 它确实增加很多新概念相比,com,其中大部分直接来自. NET ——例如,winrt对象模型的代表,和事件完成. NET-style ( 使用委托和添加/删除订阅服务器方法,每个事件一个) 而不是旧的com事件源和汇的典范。 其他值得注意的事情,WinRT也有参数化的("通用") 接口。

另一个重大变化是所有WinRT组件都有可用的元数据,就像. NET 程序集一样。 在typelibs中,你有点像,但不是每个组件都有它们。 对于 WinRT,元数据包含在. winmd 文件中- 查看"c: program文件( x86 ) Windows kits8.0windows Metadata Developer开发人员预览。 如果你绕过,你会发现它们实际上是没有代码的CLI程序集,只是元数据表。 你可以使用ILDASM打开它们,实际上。 注意,这并不意味着WinRT本身被管理- 它只是重用文件格式。

然后根据对象模型实现了许多库- 定义WinRT接口和类。 再一次,看看"Windows 元数据"文件夹上面提到的是什么,或者只是在 vs 并选择"Windows 8.0"点燃 对象浏览器 框架选择器,看看都是什么。 这里有很多,它不单独处理 UI - 你还获取诸如 Windows.Data.JsonWindows.Graphics.Printing 或者 Windows.Networking.Sockets 之类的命名空间。

然后你会得到几个库,这些库是专门处理用户界面的- 大多数是 Windows.UI 或者 Windows.UI.Xaml 下的各种命名空间。 其中很多非常类似于 wpf/silverlight命名空间- 比如 Windows.UI.Xaml.ControlsSystem.Windows.Controls 密切相关;Windows.UI.Xaml.Documents 等。

现在,.NET 有能力直接引用WinRT组件,就好像它们是. NET 程序集一样。 这与com互操作works不同- 你不需要任何中间工件,比如互操作程序集,你只需要 /r. winmd 文件,而元数据中的成员就可以看到,就像它们是. NET 对象一样。 注意WinRT库本身是完全本机( 因此,使用WinRT的原生 C++ 程序根本不需要 CLR ) -魔法使所有的东西,作为托管是CLR本身,而是相当低的水平。 如果你ildasm. NET 程序引用一个. winmd, 你会发现它实际上看起来像一个外来的装配参考——没有花招诡计如嵌入型。

这不是一个简单的映射,- CLR试图在可能的情况下将WinRT类型调整为等价的。 因此 比如 guid,日期和uri变为 System.GuidSystem.DateTimeSystem.Uri ;WinRT集合接口,如 IIterable<T>IVector<T> 变成 IEnumerable<T>IList<T>,等等。 这是双向——如果你有一个实现 IEnumerable<T>. NET 对象,并将其传递回winrt,它会认为这是 IIterable<T>

最终,这意味着. NET metro应用程序获得现有标准. NET 库的一个子集,并( 原生) winrt库,其中一些——尤其是 Windows.UI ——看起来非常类似于silverlight, API-wise 。 你仍然有定义用户界面的XAML,并且仍然可以处理与Silverlight相同的基本概念,如数据绑定,资源,样式,模板 等等,在许多情况下,可以通过 using 来移植一个Silverlight应用程序,并调整API的代码。

winrt本身没有任何html和css,和这只熊与javascript在某种意义上,它也是暴露,类似于为. NET 它是如何做的。 你不需要处理 HTML/CSS/JS WinRTui库在你当你使用. NET ( 嗯,我想,如果你真的想要,你可以主持一个 WebView 控件。) metro应用。 你的.NET 和Silverlight技能在这个编程模型中仍然非常重要。

从构建注释记号: keynote stack 他们正在为 HTML/CSS/Javascript 应用和 C#/xaml应用提供通用 api 。 将使用 C# 和 XAML,但它不是WPF或者 Silverlight 。

想法是,现在的关键是两个发展轨迹——桌面和地铁。

  • 桌面是旧应用的发源地。
  • 可以通过多种方式构建新的应用程序,Metro应用程序,包括 VB.Net,C# 或者 C++ 。 这三种语言选项可以使用XAML来构建用户界面。 另一种方法是使用 JavaScript/HTML5/CSS 来开发用户界面和应用程序代码。

一些要点:

  • Windows 8感觉像是一个upscaled移动电话操作系统。
  • 在Metro中,没有重叠的top-level Windows,就像移动电话上没有一样。 如果你想要一个MDI样式应用程序,你需要留在桌面。
  • 地铁风格应用在不可见时自动挂起。 这是为了延长电池寿命。 这意味着它将没有意义对许多现有的桌面应用程序,执行后台处理即使用户不与他们互动,移植到地铁。
  • Windows 8的ARM版本将不支持桌面应用程序。 所以如果你想写一个应用,你想要它在任何版本的Windows 上工作,那么它必须是一个Metro应用。

架构的修改版本一定能帮助你理解事情的确切位置。 其中一个Telerik忍者与CLR团队聊天并修改了图片:

Windows 8 Platform and Tools (including the CLR)

在这里你可以看到CLR的位置。 .NET 框架现在有两个配置文件

1-. NET 地铁配置文件( 处理Metro应用程序的CLR )

2-. NET 客户端配置文件( C#,VB.Net 应用程序的CLR运行时)

我希望这给你一个更清晰的图片。 阅读全文: http://dougseven.com/2011/09/15/a-bad-picture-is-worth-a-thousand-long-discussions/

来自微软的大量细节,参见参考资料。

Windows 运行时使用API元数据(. winmd 文件) 公开。 这与. NET 框架( Ecma-335 ) 使用的格式相同。 底层的二进制契约使得你可以直接使用你所选择的开发语言访问 Windows 运行时 api 。 Windows 运行时api的形状和结构可以由静态语言,比如 C# 和动态语言,如 JavaScript 。 智能感知在 JavaScript,C#,Visual Basic和 C++ 中可用。

简而言之,Windows 运行时是一组公开 Windows 功能的新库,可以对每种语言进行 JavaScript/C#/VB/C++.,并可以直接调用它们,而不必通过某些thunking层进行调用。

Silverlight和WPF是在CLR上运行的XAML 。 在其他功能中,Windows 运行时公开了一个与Silverlight非常相似的XAML版本,但以一种原生方式,而不是通过 CLR 。 可以从CLR访问,也可以从 C++ 访问。

...