2012-01-30 84 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