WinRT XAML — управляемый и неуправляемый — как это работает?

Есть что-то в новом WinRT API и языках, которые на него ориентированы (прямо или косвенно), и их связи с XAML, чего я не понимаю.

  1. Языки .NET (C#, VB.Net, F#) можно использовать для создания приложений XAML Metro, которые работают в среде CLR с ограничениями API, которая, в свою очередь, работает на WinRT.
  2. C++ можно использовать для создания неуправляемых приложений XAML, которые работают непосредственно поверх WinRT API.

Мой вопрос заключается в следующем: преобразуется ли XAML в сценарии 1 в BAML, а затем в MSIL (как в традиционных приложениях .NET) или для этого есть новый механизм? Если нет, то как компилятор, создающий неуправляемые приложения, преобразует тот же XAML в собственные инструкции? Решаются ли два сценария с помощью одной и той же стратегии компиляции? Если да, то как?


person Dean Chalk    schedule 30.01.2012    source источник
comment
Это может быть полезно: channel9.msdn.com/Events/BUILD/BUILD2011/TOOL. -690°C   -  person Mr.Anubis    schedule 30.01.2012


Ответы (1)


В сценарии 1 при написании городских приложений вы больше не используете реализацию .Net XAML, пространство имен System.Windows.Controls, вместо этого вы используете элементы управления XAML из Windows.UI.Xaml.Controls.

Реализация XAML в новом пространстве имен теперь является частью WinRT, поэтому она неуправляема. Когда вы используете эти элементы управления в приложении Metro .Net, вы фактически используете вызываемые оболочки времени выполнения для этих элементов управления WinRT.

Когда вы используете XAML в неуправляемом метро-приложении C++, вы используете неуправляемые элементы управления WinRT, поэтому да, они компилируются в собственный код, но нет преобразования из .Net в собственный код.

person sarvesh    schedule 31.01.2012
comment
Но если я пишу приложения метро XAML на управляемом языке (например, С#), то приложение запускается поверх ограниченной CLR через MSIL, который включает (я думаю) XAML (в данном случае это BAML??). я все еще в замешательстве - person Dean Chalk; 01.02.2012
comment
Краткий ответ: когда вы используете XAML на управляемом языке для написания городских приложений, вы фактически используете реализацию WinRT, а НЕ реализацию .Net. Есть две причины, по которым это незаметно: 1) WinRT при компиляции создает файлы .winmd, которые являются файлами метаданных сборки и генерируются в том же формате, который указан в CLI. Это позволяет нам использовать эти элементы управления WinRT, как если бы они были элементами управления .Net. CLR позаботится обо всей магии взаимодействия, поэтому нет необходимости в сборках взаимодействия. 2. Элементы управления WinRT имеют то же имя, но в другом пространстве имен. - person sarvesh; 01.02.2012