4

关于新的 WinRT API 和针对它的语言(直接或间接)以及它们与 XAML 的关系,我不明白。

  1. .NET 语言(C#、VB.Net、F#)可用于构建 XAML Metro 应用程序,这些应用程序在“受 API 限制”的 CLR 上运行,而 CLR 又在 WinRT 上运行
  2. C++ 可用于构建直接在 WinRT API 之上运行的非托管 XAML 应用程序

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

4

1 回答 1

6

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

新命名空间中的 XAML 实现现在是 WinRT 的一部分,因此它是非托管的。当您在 Metro .Net 应用程序中使用这些控件时,您实际上是在为这些 WinRT 控件使用运行时可调用包装器。

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

于 2012-01-31T18:21:41.137 回答