stringtranslate.com

Среда выполнения Windows

Среда выполнения Windows ( WinRT ) — это независимый от платформы компонент и архитектура приложений, впервые представленная в Windows 8 и Windows Server 2012 в 2012 году. Она реализована на C++ и официально поддерживает разработку на C++ (через C++/WinRT , C++/CX или WRL). Rust/WinRT , Python/WinRT , JavaScriptTypeScript , а также языки управляемого кода C# и Visual Basic .NET (VB.NET).

WinRT — это не среда выполнения в традиционном смысле, а скорее независимый от языка двоичный интерфейс приложения , основанный на COM , позволяющий использовать объектно-ориентированные API с нескольких языков, при этом службы обычно предоставляются полнофункциональной средой выполнения, например, активация типов. [1] То есть WinRT — это «система доставки API». Приложения, использующие среду выполнения Windows, могут работать в изолированной среде, чтобы обеспечить большую безопасность и стабильность, и могут поддерживать как x86 , так и ARM . [2] [3] Компоненты WinRT разработаны с учетом совместимости нескольких языков и API, включая собственные, управляемые языки и языки сценариев. Встроенные API, предоставляемые Windows и использующие WinRT ABI, обычно известны как WinRT API; однако любой может использовать WinRT ABI для своих собственных API.

Технологии

WinRT реализован на языке программирования C++ [4] и является объектно-ориентированным по своей конструкции. [4] Базовая технология Windows API (Win32 API) написана в основном на языке C. [5] Это неуправляемый двоичный интерфейс приложения, основанный на модели компонентных объектов (COM), который позволяет взаимодействовать с несколькими языками, как и COM. Однако определения API хранятся в .winmdфайлах, закодированных в формате метаданных ECMA 335 , который .NET Framework также использует с некоторыми изменениями. Для компонентов WinRT, реализованных в машинном коде, файл метаданных содержит только определения методов, классов, интерфейсов и перечислений, а реализация предоставляется в отдельной DLL. [6] [7] [8] Этот общий формат метаданных упрощает использование WinRT API из приложений .NET с более простым синтаксисом, чем P/Invoke . [9] [ ненадежный источник? ] Windows предоставляет набор встроенных API-интерфейсов, основанных на WinRT ABI, которые предоставляют все, от библиотеки WinUI на основе XAML до доступа к устройствам, таким как камера, микрофон и т. д.

Предыдущий язык C++/CX (расширения компонентов), который заимствовал некоторую часть синтаксиса C++/CLI , был введен для написания и использования компонентов WinRT с меньшим количеством связующего кода, видимого программисту, по сравнению с классическим COM-программированием на C++, и налагал меньше ограничений по сравнению с классическим COM-программированием на C++. C++/CLI о смешивании типов. Расширения компонентов C++/CX рекомендуется использовать только на границе API, а не для других целей. [10] Обычный C++ (с дисциплиной, специфичной для COM) также можно использовать для программирования с компонентами WinRT, [11] с помощью библиотеки шаблонов C++ среды выполнения Windows (WRL), которая по назначению аналогична той, которую предоставляет библиотека активных шаблонов. для COM. [12] В 2019 году Microsoft отказалась от C++/CX в пользу библиотеки заголовков C++/WinRT . [13]

Большинство приложений WinRT работают в изолированной программной среде и требуют явного разрешения пользователя для доступа к критическим функциям ОС и базовому оборудованию. По умолчанию доступ к файлам ограничен несколькими заранее определенными местами, например каталогами «Документы» или «Изображения». [14]

Приложения WinRT упаковываются в формат файлов .appx, а затем и .msix ; основанный на соглашениях об открытой упаковке , он использует формат ZIP с добавленными файлами XML. [15] Приложения WinRT распространяются в основном через магазин приложений под названием Microsoft Store , где пользователи могут приобретать и загружать приложения Windows (называемые приложениями Магазина Windows ). Первоначально приложения WinRT можно было загружать только из-за пределов Магазина Windows в системах Windows 8 или RT, которые являются частью домена Windows или оснащены специальным ключом активации, полученным от Microsoft. [16] [17] [18] [19] Однако эти ограничения были сняты в обновлении Windows от 10 ноября, где пользователи могут свободно загружать любое приложение, подписанное доверенным сертификатом, включив соответствующий параметр. [20]

В отличие от Win32 и, как и в .NET Framework 4.5 , большинство API, реализация которых, как ожидается, потребует значительного времени, реализованы как асинхронные. При вызове асинхронной функции среды выполнения Windows задача запускается в другом потоке или процессе, и функция немедленно завершает работу, освобождая приложение для выполнения других задач во время ожидания результатов. [21] Асинхронная модель требует новых конструкций языка программирования. Каждый язык предоставляет свой собственный способ использования асинхронных API. Части встроенного API, требующие асинхронного доступа, включают экранные сообщения и диалоги, доступ к файлам, подключение к Интернету, сокеты, потоки, устройства и службы, а также календарь, контакты и встречи.

Услуги

Метаданные

Метаданные описывают API, написанные с использованием WinRT ABI. Он определяет модель программирования , которая позволяет писать объектно-ориентированный код, который можно использовать на разных языках программирования , и обеспечивает такие службы, как отражение .

Херб Саттер , эксперт по C++ в Microsoft , объяснил во время своей сессии по C++ на конференции Build 2011, что метаданные WinRT имеют тот же формат, что и метаданные CLI . [10] Собственный код (т. е. машинный код, специфичный для процессора) не может содержать метаданные, поэтому он хранится в отдельном файле метаданных, который может отображаться как обычные сборки CLI . [22] Поскольку это тот же формат, что и метаданные CLI, API WinRT можно использовать из управляемых языков CLI , как если бы это был просто API .NET.

Типовая система

WinRT имеет богатую объектно-ориентированную систему типов на основе классов , построенную на метаданных. Он поддерживает конструкции с соответствующими конструкциями в .NET framework: классы , методы , свойства , делегаты и события .

Одним из основных дополнений WinRT по сравнению с COM является межприложенный двоичный интерфейс (ABI), дженерики в стиле .NET . Только интерфейсы и делегаты могут быть универсальными, а классы времени выполнения и методы в них — нет. Общие интерфейсы также известны как параметризованные интерфейсы. В C++/CX они объявляются с использованием ключевого слова genericс синтаксисом, очень похожим на синтаксис ключевого слова template. Классы WinRT (ссылочные классы) также можно обобщить с помощью шаблонов C++, но в метаданные .winmd можно экспортировать только экземпляры шаблонов (с некоторым изменением имен ), в отличие от универсальных шаблонов WinRT, которые сохраняют свою универсальность в метаданных. WinRT также предоставляет набор интерфейсов для универсальных контейнеров , которые параллельны интерфейсам стандартной библиотеки C++ , а языки предоставляют некоторые функции взаимного (обратного) преобразования. Использование коллекций WinRT на языках .NET (например, C# и VB) и в JavaScript более прозрачно, чем в C++, при этом автоматические сопоставления с их естественными эквивалентами происходят «за кулисами». При разработке компонента WinRT на управляемом языке необходимо соблюдать некоторые дополнительные правила в стиле COM, например, типы коллекций платформы .NET не могут быть объявлены как возвращаемые типы, но на границе компонента можно использовать только интерфейсы WinRT, которые они реализуют.

WinRT-компоненты

Классы, скомпилированные для WinRT, называются компонентами WinRT . Это классы, которые можно написать на любом поддерживаемом языке и для любой поддерживаемой платформы. Ключевым моментом являются метаданные. Эти метаданные позволяют взаимодействовать с компонентом любого другого языка WinRT. Среда выполнения требует, чтобы компоненты WinRT, созданные с помощью .NET Framework, использовали определенные типы интерфейсов или интерфейсы типов .NET, которые автоматически сопоставляются с первым из названных. Наследование пока не поддерживается в управляемых компонентах WinRT, за исключением классов XAML. [23]

Интерфейсы программирования

Программы и библиотеки, предназначенные для среды выполнения WinRT, можно создавать и использовать на нескольких платформах и языках программирования. В частности, C / C++ (либо с языковыми расширениями, обеспечивающими первоклассную поддержку концепций WinRT, либо с библиотекой шаблонов нижнего уровня, позволяющей писать код на стандартном C++), .NET ( C# и Visual Basic .NET (VB.NET)) и JavaScript . Это стало возможным благодаря метаданным. В терминологии WinRT языковая привязка называется языковой проекцией.

C++ (C++/WinRT, расширения компонентов, WRL)

Стандартный C++ является первоклассным представителем платформы WinRT. Начиная с Windows 10 версии 1803, Windows SDK содержит C++/WinRT. C++/WinRT — это полностью стандартная современная проекция языка C++17 для API-интерфейсов среды выполнения Windows (WinRT), реализованная как библиотека на основе заголовочных файлов и предназначенная для обеспечения первоклассного доступа к современному API-интерфейсу Windows. С помощью C++/WinRT API среды выполнения Windows можно создавать и использовать с помощью любого совместимого со стандартами компилятора C++17. WinRT — это собственная платформа, поддерживающая любой собственный (и стандартный) код C++, поэтому разработчик C++ может повторно использовать существующие собственные библиотеки C/C++. В C++/WinRT нет языковых расширений.

Существует два других устаревших варианта использования WinRT из C++: библиотека шаблонов C++ среды выполнения Windows (WRL), библиотека шаблонов в стиле ATL (аналогичная библиотеке шаблонов Windows или WTL) и C++/CX (C++ с расширениями компонентов), напоминающая C++. /CLI. [24] Из-за внутренних требований к потреблению в Microsoft WRL не содержит исключений, что означает, что его дисциплина возвращаемых значений основана на HRESULT , как и в COM. [25] C++/CX, с другой стороны, оборачивает вызовы WinRT кодом, который выполняет проверку ошибок и при необходимости генерирует исключения. [26]

C++/CX имеет несколько расширений, обеспечивающих интеграцию с платформой и ее системой типов. Синтаксис напоминает синтаксис C++/CLI , хотя он создает собственный (хотя и не стандартный) код и метаданные, которые интегрируются со средой выполнения. Например, объекты WinRT могут быть выделены с помощью ref new, который является аналогом gcnewC++/CLI. Оператор шляпы ^сохраняет свое значение, однако в случае, когда и вызывающая сторона, и вызываемая сторона написаны на C++ и находятся в одном и том же процессе, ссылка шляпы представляет собой просто указатель на vptr в таблицу виртуальных методов (vtable, VMT). [26]

Наряду с C++/CX, относительно традиционного COM-программирования на C++, существуют частичные классы , опять-таки вдохновленные .NET. Они позволяют транслировать экземпляр кода WinRT XAML в код C++ с помощью инструментов, а затем объединять его с кодом, написанным человеком, для создания полного класса, обеспечивая при этом чистое разделение сгенерированных машиной и отредактированных человеком частей реализации класса в разные файлы.

.СЕТЬ

.NET Framework и среда Common Language Runtime (CLR) интегрированы в WinRT в качестве подплатформы. Он повлиял на экосистему и установил стандарты через формат метаданных и библиотеки. CLR предоставляет такие услуги, как JIT-компиляция кода и сборка мусора . Приложения WinRT, использующие языки .NET, используют WinUI на основе XAML и в основном написаны на C#, VB.NET и впервые для XAML с собственным кодом , использующим C++/CX. Хотя программы еще официально не поддерживаются, их также можно писать на других языках .NET. В .NET 5 Microsoft удалила встроенную поддержку WinRT и вместо этого создала CsWinRT, инструмент, который генерирует код взаимодействия для доступа к API-интерфейсам среды выполнения Windows, аналогично тому, как работает C++/WinRT. [27] [28]

Ограничения

Классы, определенные в компонентах WinRT, встроенных в управляемые языки .NET, должны быть объявлены как sealed, чтобы их нельзя было получить из них. Однако незапечатанные классы WinRT, определенные где-либо еще, могут быть унаследованы из .NET, их виртуальные методы переопределены и т. д.; но унаследованный управляемый класс все равно должен быть запечатан.

Члены, которые взаимодействуют с другим языком, должны иметь подпись с типами WinRT или управляемый тип, который можно преобразовать в них. [23]

JavaScript

Приложения WinRT также можно кодировать с использованием HTML с JavaScript в коде программной части , которые запускаются с использованием механизма рендеринга Trident и механизма JavaScript Chakra , оба из которых также используются Internet Explorer . При кодировании приложения WinRT на JavaScript его функции адаптируются в соответствии с соглашениями об именах JavaScript, а пространства имен также сопоставляются с объектами JavaScript.

Другие языки

Microsoft находится в процессе проектирования API WinRT для языков, отличных от C++. Одним из примеров является Rust/WinRT, интерфейс для программ, написанных на Rust , для использования и создания API-интерфейсов WinRT. [29] Rust/WinRT является частью Windows App SDK (ранее Project Reunion), попытки Microsoft объединить традиционный рабочий стол Windows и модель приложений UWP. [30]

Мосты

С появлением универсальной платформы Windows (UWP) платформа получила множество мостов API, которые позволяют легко переносить программы, изначально разработанные для других платформ, используя при этом преимущества функций UWP. Microsoft предоставила мосты для Android (несуществующих с 2016 года), iOS ( Cocoa Touch ), Progressive Web Apps , Silverlight , а также традиционных настольных приложений Windows (с использованием пакета MSIX из Windows App SDK ).

API

WinRT поставляется с интерфейсом прикладного программирования (API) в виде библиотеки классов , которая предоставляет разработчику функции Windows 8, такие как API иммерсивного интерфейса. Он доступен и доступен для использования на любом поддерживаемом языке.

Классы времени выполнения

Классы среды выполнения Windows — это набор пакетов SDK, которые обеспечивают доступ ко всем функциям — от анализатора XAML до функции камеры. SDK реализованы как собственные библиотеки C/C++ (неуправляемые).

Соглашения об именах

На соглашения об именах компонентов (классов и других членов) в API сильное влияние оказывают соглашения об именах .NET, в которых используется верблюжий регистр (в частности, PascalCase). Microsoft рекомендует пользователям следовать этим правилам в случае, если не указаны другие.

Эти соглашения проецируются по-разному в некоторых языках, например в JavaScript, который преобразует их в свои соглашения и наоборот. Это должно обеспечить естественное и единообразное взаимодействие независимо от языка программирования.

Ограничения и правила

Поскольку среда выполнения Windows рассчитана на различные языки, существуют некоторые ограничения на основные типы данных, позволяющие поддерживать все такие языки. Программистам следует быть осторожными с поведением этих типов при использовании с открытым доступом (для параметров метода, возвращаемых значений метода, свойств и т. д.). [31]

Основные типы
В языках .NET и C++ существует богатый набор типов данных, представляющих различные числа.
В JavaScript a Numberможет представлять точность до 53 бит.
В WinRT единственный недостающий числовой тип данных — это 8-битное целое число со знаком относительно .NET и C++. Разработчики JavaScript должны быть осторожны при работе с большими числами при написании кода для WinRT.
Струны
Строки неизменяемы в .NET и JavaScript, но изменяемы в C++.
Нулевой указатель, передаваемый WinRT в виде строки с помощью C++, преобразуется в пустую строку.
В .Net нуль, передаваемый в виде строки в WinRT, преобразуется в пустую строку.
В JavaScript значение null, передаваемое в виде строки в WinRT, преобразуется в строку со словом null. Это связано с тем, что ключевое слово JavaScript nullпредставлено как нулевой объект. Аналогичные результаты возникают при переходе undefinedк WinRT из JavaScript.
Структуры
В .NET и C++ структуры являются типами значений, и такая структура может содержать любой тип.
JavaScript не поддерживает структуры напрямую.
В WinRT использование структур разрешено только для содержащих типов, имеющих семантику значений, включая числа, строки и другие структуры. Указатели или ссылки на интерфейсы запрещены.
Рекомендации
В .NET объекты передаются по ссылке, тогда как числа и структуры передаются по значению.
В C++ все типы можно передавать по ссылке или по значению.
В WinRT интерфейсы передаются по ссылке; все остальные типы могут передаваться либо по значению, либо по ссылке. [2]
Массивы
В .NET, C++ и JavaScript массивы являются ссылочными типами.
В WinRT массивы являются типами значений и весьма ограничены.
События
В .NET и C++ клиенты подписываются на события с помощью +=оператора.
В JavaScript addEventListenerфункция или on<EventName>свойство настройки используются для подписки на события.
В WinRT все языки могут использовать собственный способ подписки на события.
Коллекции
Некоторые коллекции .NET напрямую сопоставляются с коллекциями WinRT.
Тип WinRT Vector напоминает массивы, и для их использования используется синтаксис массива.
Тип карты WinRT представляет собой коллекцию пар ключ-значение и проецируется как словарь на языках .NET.
Перегрузка метода
Все языки WinRT (.NET, C++, JavaScript) поддерживают перегрузку параметров.
.NET и C++ также поддерживают перегрузку по типу.
В WinRT для перегрузки используется только номер параметра.
Асинхронность
Все методы WinRT спроектированы таким образом, что любой метод, занимающий более 50 миллисекунд, является асинхронным.
Установленный шаблон именования для различения асинхронных методов <Verb>[<Noun>]Async: . В полной библиотеке времени выполнения все методы, которые могут длиться более 50 мс, реализуются только как асинхронные методы.

Среда выполнения Windows Phone

Windows Phone 8.1 использует версию среды выполнения Windows, называемую Windows Phone Runtime . Он позволяет разрабатывать приложения на C# и VB.NET, а также компоненты среды выполнения Windows на C++/CX. [32] Хотя поддержка WP8 была ограниченной, платформа в конечном итоге объединилась с Windows 8.1 в Windows Phone 8.1 .

Windows Телефон 8

Windows Phone 8 имеет ограниченную поддержку разработки и использования компонентов среды выполнения Windows через среду выполнения Windows Phone . Многие из API-интерфейсов среды выполнения Windows в Windows 8, которые обрабатывают основные функции операционной системы, были перенесены в Windows Phone 8. [33] По запросу индустрии разработки игр была добавлена ​​поддержка разработки собственных игр с использованием C++/CX и DirectX.

Однако платформа XAML для Windows Phone по-прежнему основана на той же платформе Microsoft Silverlight , что и в Windows Phone 7, для обеспечения обратной совместимости. Таким образом, по состоянию на 2016 год разработка XAML на C++/CX невозможна. Разработка с использованием HTML5 или WinJS не поддерживается в Windows Phone 8.

Windows Телефон 8.1

Поддержка среды выполнения Windows в Windows Phone 8.1 аналогична Windows 8.1. Этот выпуск добавляет на платформу полный API среды выполнения Windows, включая поддержку WinRT XAML и привязки языков для C++/CX и HTML5JavaScript . Существует также тип проекта под названием « Универсальные приложения» , позволяющий приложениям совместно использовать код в версиях Windows Phone и Windows 8.1.

Была обновлена ​​платформа Windows Phone 8 Silverlight Framework. [ когда? ] Он может использовать некоторые новые функции среды выполнения Windows.

Среда выполнения Windows Phone использует формат пакета AppX из Windows 8 после использования Silverlight XAP .

Рекомендации

  1. ^ Чжан, И (15 марта 2017 г.). «Среда выполнения Windows не является средой выполнения». Блог yizhang82 . Проверено 14 июня 2021 г.
  2. ^ аб Аврам, Авель (21 сентября 2011 г.). «Детали проектирования среды выполнения Windows». ИнфоQ .
  3. ^ Клюг, Брайан; Смит, Райан (13 сентября 2011 г.). «Сборка Microsoft: Windows 8, предварительная бета-версия». АнандТех .
  4. ^ AB Майкл, Мэйберри (2012). Обнародован WinRT . Нью-Йорк: Апресс . п. 3. ISBN 978-1-4302-4585-8.
  5. ^ «Создание приложений Win32 (C++)» . MSDN . Майкрософт . Проверено 12 января 2014 г.
  6. ^ «Файлы метаданных Windows (WinMD)» . Справочник API для приложений UWP. Документы Майкрософт . Проверено 20 июля 2019 г.
  7. Де Икаса, Мигель (15 сентября 2011 г.). «WinRT демистифицируется». Личный блог Мигеля де Икаса . Самостоятельно опубликовано . Проверено 15 января 2014 г.
  8. ^ «Файлы WINMD под капотом» . КодПроект . 15 октября 2012 года . Проверено 14 июня 2021 г.
  9. ^ «Каковы накладные расходы на маршалинг COM при вызове WinRT API из C#?». Форум MSDN . Самостоятельно опубликовано . 20 сентября 2011 года . Проверено 15 января 2014 г.
  10. ^ ab «Использование среды выполнения Windows из C++ | Build2011 | Channel 9». Channel9.msdn.com. 14 сентября 2011 года. Архивировано из оригинала 12 октября 2011 года . Проверено 24 апреля 2012 г.
  11. Сивакумар, Ниш (29 сентября 2011 г.). «Visual C++ и WinRT/Metro — Некоторые основы — CodeProject®». Codeproject.com . Проверено 24 апреля 2012 г.
  12. ^ «Использование среды выполнения Windows из C++ | Build2011 | Channel 9» . Channel9.msdn.com. 14 сентября 2011 года. Архивировано из оригинала 12 октября 2011 года . Проверено 24 апреля 2012 г.
  13. ^ «Введение в C++/WinRT — приложения Windows UWP» . docs.microsoft.com . Майкрософт.
  14. ^ фамилияхолиу. «Разрешения на доступ к файлам — приложения UWP». docs.microsoft.com . Проверено 8 августа 2020 г.
  15. ^ «Разработка простого и безопасного пакета приложений - APPX» . Блог разработчиков приложений для Windows 8 . Проверено 30 декабря 2013 г.
  16. ^ «Как добавлять и удалять приложения» . ТехНет . Майкрософт. 31 мая 2012 года . Проверено 4 октября 2012 г. Чтобы включить загрузку неопубликованных приложений на компьютере с Windows 8 Корпоративная, который не присоединен к домену, или на любом компьютере с Windows® 8 Pro, необходимо использовать ключ активации продукта для неопубликованной загрузки. Чтобы включить загрузку неопубликованных приложений на устройстве Windows® RT, необходимо использовать ключ активации продукта для неопубликованных приложений. Дополнительные сведения о загрузке неопубликованных ключей активации продукта см. в разделе Корпоративное лицензирование Microsoft.
  17. ^ «Windows 8: Беспорядок в метро» . Журнал ПК. Архивировано из оригинала 18 ноября 2018 года . Проверено 8 сентября 2012 г.
  18. ^ «Microsoft теперь использует «современный стиль пользовательского интерфейса» для обозначения приложений в стиле Metro для Windows 8» . Проверено 10 августа 2012 г.
  19. ^ «Что такое приложение Microsoft Store?». Центр разработки Windows . Проверено 1 октября 2012 г.
  20. ^ «Что такое неопубликованная загрузка и как загружать неопубликованные приложения в Windows 10? [ДЕТАЛИ]» . Силикофильный . 27 июля 2019 г. Проверено 14 июня 2021 г.
  21. ^ «Асинхронное программирование (приложения Магазина Windows)» . MSDN . Майкрософт . Проверено 12 января 2014 г.
  22. ^ «.NET получает новую жизнь» . Архивировано из оригинала 24 сентября 2011 года . Проверено 16 сентября 2011 г.
  23. ^ ab «Использование среды выполнения Windows из C# и Visual Basic | Build2011 | Channel 9». Channel9.msdn.com. 14 сентября 2011 года . Проверено 24 апреля 2012 г.
  24. ^ «Внутри дизайна C++/CX — Блог группы Visual C++ — Домашняя страница сайта — Блоги MSDN» . Блоги.msdn.com. 20 октября 2011 года . Проверено 24 апреля 2012 г.
  25. Чарльз (26 октября 2011 г.). «GoingNative 3: Эпизод C++/CX с Марианом Лупару | C9::GoingNative | Канал 9». Channel9.msdn.com. Архивировано из оригинала 7 мая 2012 года . Проверено 24 апреля 2012 г.
  26. ^ ab Под обложками C++ для приложений в стиле Metro с Деоном Брюисом на //Build
  27. ^ «CSWinRT: Как вызывать API-интерфейсы Windows WinRT из приложений .NET5» . TECHCOMMUNITY.MICROSOFT.COM . 22 сентября 2020 г. . Проверено 14 июня 2021 г.
  28. ^ Мэйберри, Майкл (2012), «Создание приложения .NET с помощью WinRT», WinRT Revealed , Беркли, Калифорния: Apress, стр. 29–46, doi : 10.1007/978-1-4302-4585-8_3, ISBN 978-1-4302-4584-1, получено 14 июня 2021 г.
  29. ^ "Microsoft/winrt-rs". Гитхаб . 28 сентября 2021 г.
  30. ^ «microsoft/WindowsAppSDK: Windows App SDK расширяет возможности всех настольных приложений Windows с помощью современного пользовательского интерфейса Windows, API и функций платформы, включая поддержку обратной совместимости, поставляемую через NuGet». Гитхаб . Проверено 12 октября 2021 г.
  31. ^ «Десять советов по написанию приложения в стиле Metro на гибридном языке - Build2011 - Канал 9» . Канал 9 . Майкрософт.
  32. ^ «Справочник по API Windows Phone». Справочник по API Windows Phone . Майкрософт . 21 июля 2014 г.
  33. ^ «API среды выполнения Windows Phone» . microsoft.com . Майкрософт.

Внешние ссылки