2012-01-30 42 views
4

Theres有关新的WinRT API及其目标语言(直接或间接)以及它们与我不了解的XAML的关系。WinRT XAML - 托管和非托管 - 它是如何工作的?

  1. .NET语言(C#,VB.Net,F#)可用于构建在一个++可以使用 'API限制' CLR,这又可以运行在的WinRT
  2. 运行C XAML地铁 应用建立直接 顶部的WinRT API,它们运行

我的问题是这样的非托管的XAML应用程序 - 它在方案1中的XAML地转化为BAML,然后MSIL(按照传统的.NET应用程序),或者是有一个新的机制呢?如果不是,那么编译器如何构建非托管应用程序将相同的XAML转换为本机指令?这两种情况是否可以用相同的编译策略解决?如果是这样,那么怎么样?

+0

这可能是有用的:http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-690C – 2012-01-30 16:36:58

回答

6

在编写metro应用程序的场景1中,您不再使用.Net XAML实现System.Windows.Controls命名空间,而是使用Windows.UI.Xaml.Controls中的XAML控件。

新命名空间中的XAML实现现在是WinRT的一部分,因此它是非托管的。当您在metro .Net应用程序中使用这些控件时,实际上是使用Runtime Callable Wrappers来处理这些WinRT控件。

当您在非托管C++ metro应用程序中使用XAML时,您使用的是unamanged WinRT控件,因此,它们正在被编译为本机代码,但没有从.Net转换为本机代码。

+0

但是,如果我使用托管语言编写XAML metro应用程序(例如c#),那么应用程序将运行ontop通过MSIL限制CLR--包括(我认为)XAML(在这个例子中是BAML)。我仍然感到困惑 – 2012-02-01 08:18:41

+2

简短的回答:当您使用托管语言编写城域应用程序的XAML时,实际上使用的是WinRT实现而不是.Net实现。有两个原因是不明显的1)WinRT编译时会生成.winmd文件,它是程序集元数据文件,它以CLI中指定的相同格式生成。这允许我们像使用.Net控件一样使用这些WinRT控件。 CLR负责所有互操作魔法,因此不需要互操作程序集。 2.尽管在不同的命名空间中,WinRT控件具有相同的名称。 – sarvesh 2012-02-01 17:37:18