Ian*_*ose 353 wpf windows-runtime windows-store-apps win-universal-app windows-10
我试图了解用于创建Metro风格应用程序的新Windows 8 Runtime .我知道你可以在XAML上使用它,它基于.NET,所以C#和VB.NET可以用来编写应用程序,但它似乎与HTML,CSS,DOM和JavaScript有关.
根据.NET UI程序员可以理解的术语,有人可以用几段解释它是什么吗?(我错过了理解它所必需的"关键".)
我们都知道WPF,Silverlight,Windows Forms等将至少在英特尔系统上继续在Windows 8(和Windows 10)下运行,所以请不要告诉我......
Pav*_*aev 479
在最低级别,WinRT是在ABI级别上定义的对象模型.它使用COM作为基础(因此每个WinRT对象实现IUnknown
并进行引用计数),并从那里构建.与旧的COM相比,它确实添加了许多新概念,其中大多数直接来自.NET - 例如,WinRT对象模型具有委托,事件是.NET样式的(具有委托和添加/删除订阅者)方法,每个事件一个)而不是事件源和接收器的旧COM模型.在其他值得注意的事情中,WinRT还具有参数化("通用")接口.
另一个重大变化是所有WinRT组件都有可用的元数据,就像.NET程序集一样.在COM中你有点类型与typelibs,但不是每个COM组件都有它们.对于WinRT,元数据包含在.winmd文件中 - 在Developer Preview中查看"C:\ Program Files(x86)\ Windows Kits\8.0\Windows Metadata \".如果你四处寻找,你会发现它们实际上是没有代码的CLI程序集,只有元数据表.实际上,您可以使用ILDASM打开它们.注意,这并不意味着WinRT本身是受管理的 - 它只是重用文件格式.
然后根据该对象模型实现了许多库 - 定义WinRT接口和类.再次,看看上面提到的"Windows Metadata"文件夹,看看那里有什么; 或者只是在VS中启动对象浏览器并在框架选择器中选择"Windows 8.0",以查看所涵盖的内容.那里有很多,它不仅仅涉及UI - 你还可以获得名称空间,例如Windows.Data.Json
,或Windows.Graphics.Printing
,或Windows.Networking.Sockets
.
然后你会得到几个专门处理UI的库 - 大多数是在Windows.UI
或下面的各种命名空间Windows.UI.Xaml
.其中很多都与WPF/Silverlight名称空间非常相似 - 例如Windows.UI.Xaml.Controls
紧密匹配System.Windows.Controls
; 同上Windows.UI.Xaml.Documents
等
现在,.NET能够直接引用WinRT组件,就好像它们是.NET程序集一样.这与COM Interop的工作方式不同 - 您不需要任何中间工件,例如互操作程序集,只需/r
一个.winmd文件,并且其元数据中的所有类型及其成员对您来说都是可见的,就像它们是.NET对象一样.请注意,WinRT库本身是完全本机的(因此使用WinRT的本机C++程序根本不需要CLR) - 将所有这些东西公开为托管的魔力都在CLR本身内,并且是相当低级别的.如果你ildasm一个引用.winmd的.NET程序,你会发现它实际上看起来像是一个extern汇编引用 - 没有任何手工技巧,比如在那里嵌入类型.
它也不是一种生硬的映射 - 在可能的情况下,CLR会尝试将WinRT类型调整为等效类型.因此,例如GUID,日期和URI 分别变为System.Guid
,System.DateTime
和System.Uri
; WinRT集合接口如IIterable<T>
和IVector<T>
成为IEnumerable<T>
和IList<T>
; 等等.这有两种方式 - 如果你有一个.NET对象实现IEnumerable<T>
,并将其传递给WinRT,它会看到它IIterable<T>
.
最终,这意味着您的.NET Metro应用程序可以访问现有标准.NET库的一个子集,也可以访问(本机)WinRT库,其中一些 - 特别是Windows.UI
- 看起来非常类似于Silverlight,API.你仍然有XAML来定义你的UI,你仍然处理与Silverlight相同的基本概念 - 数据绑定,资源,样式,模板等.在许多情况下,只需通过using
新的命名空间移植Silverlight应用程序,并在调整API的代码中调整一些位置.
WinRT本身与HTML和CSS没有任何关系,它与JavaScript有关,只是在某种意义上它也暴露在那里,类似于.NET的工作方式.当你在.NET Metro应用程序中使用WinRT UI库时,你不需要处理HTML/CSS/JS(嗯,我想,如果你真的想,你可以托管一个WebView
控件......).您的所有.NET和Silverlight技能在此编程模型中仍然非常相关.
Ran*_*ngy 66
从Build主题演讲:
他们为HTML/CSS/JavaScript应用程序和C#/ XAML应用程序提供通用API.将使用C#和XAML,但它不会完全是WPF或Silverlight.
dod*_*der 37
关键的想法是现在有两个开发轨道 - 桌面和地铁.
一些要点:
ven*_*mit 24
这个架构的修改版本肯定会帮助您了解事情的确切位置.其中一名Telerik忍者与CLR团队聊天并修改了图片:
在这里你可以看到CLR的位置..NET框架现在有两个配置文件
1- .NET Metro配置文件(处理Metro应用程序的CLR)
2- .NET客户端配置文件(C#和VB.NET应用程序的CLR运行时)
我希望这能给你一个更清晰的画面.阅读完整的文章一张糟糕的图片值得长时间讨论..
Ste*_*owe 17
这里有很多来自微软的细节.
使用API元数据(.winmd文件)公开Windows运行时.这与.NET框架(Ecma-335)使用的格式相同.底层二进制合约使您可以轻松地使用您选择的开发语言直接访问Windows运行时API.Windows运行时API的形状和结构可以通过静态语言(如C#)和动态语言(如JavaScript)来理解.IntelliSense提供JavaScript,C#,Visual Basic和C++.
简而言之,Windows Runtime是一组新的库,提供Windows功能,可用于JavaScript/C#/ VB/C++.每种语言都是为了理解并能够直接调用它们而不是通过一些thunking层.
Silverlight和WPF是在CLR上运行的XAML的风格.在其他功能中,Windows运行时公开的XAML版本与Silverlight非常相似,但是以本机方式,而不是通过CLR.它可以从CLR访问,也可以从C++访问.