Windows Runtime ( WinRT ) es una arquitectura de aplicaciones independiente de la plataforma que se introdujo por primera vez en Windows 8 y Windows Server 2012 en 2012. WinRT admite el desarrollo en C ++ / WinRT (estándar C ++), C ++ / CX (Extensiones de componentes, un lenguaje basado en C ++ ), Rust / WinRT , JavaScript - TypeScript y los lenguajes de código administrados C # y Visual Basic .NET (VB.NET). Las aplicaciones WinRT son compatibles de forma nativa con los procesadores x86 y ARM , y pueden ejecutarse dentro de un espacio aisladoentorno para permitir una mayor seguridad y estabilidad. [1] [2] Los componentes de WinRT están diseñados teniendo en cuenta la interoperabilidad entre varios lenguajes y API, incluidos los lenguajes nativos, administrados y de secuencias de comandos.
Otros nombres | WinRT |
---|---|
Desarrollador (es) | Microsoft |
Sistema operativo | Microsoft Windows |
Predecesor | API Win32 |
Tipo | Interfaz de programación de aplicaciones |
Sitio web | msdn |
Windows Phone 8.1 usa una versión de Windows Runtime denominada Windows Phone Runtime . Permite desarrollar aplicaciones en C # y VB.NET, y componentes de Windows Runtime en C ++ / CX. [3]
Tecnología
WinRT está implementado en el lenguaje de programación C ++ [4] y está orientado a objetos por diseño. [4] Su tecnología subyacente, la API de Windows (Win32 API), se escribe sobre todo en el lenguaje C . [5] Es una interfaz de programación de aplicaciones (API) de código no administrado basada en el Modelo de objetos componentes (COM) que permite la interfaz desde múltiples lenguajes, al igual que COM. Sin embargo, las definiciones de API se almacenan en archivos, que están codificados en formato de metadatos ECMA 335 , que .NET Framework también usa con algunas modificaciones. [6] [7] [ fuente no confiable? ] Este formato de metadatos común permite una sobrecarga significativamente menor al invocar WinRT desde aplicaciones .NET, en relación con P / Invoke , y una sintaxis mucho más simple. [8] [ fuente no fiable? ].winmd
El nuevo lenguaje C ++ / CX (Extensiones de componentes), que toma prestada alguna sintaxis C ++ / CLI , se introdujo para escribir y consumir componentes WinRT con menos código de cola visible para el programador, en relación con la programación COM clásica en C ++, e impone menos restricciones relativas a C ++ / CLI sobre tipos de mezcla. Las extensiones de componentes de C ++ / CX se recomiendan para su uso solo en el límite de la API, no para otros fines. [9] C regular ++ (con COM-específica disciplina) también se puede utilizar con el programa con componentes WinRT, [10] con la ayuda del tiempo de ejecución de C ++ Biblioteca de Windows Plantilla (LMR), que es similar en propósito a lo Active Template Library ofrece para COM. [11] En 2019, Microsoft dejó de utilizar C ++ / CX en favor de la biblioteca de encabezados C ++ / WinRT . [12]
Las aplicaciones WinRT se ejecutan dentro de un espacio aislado y necesitan la aprobación explícita del usuario para acceder a las funciones críticas del sistema operativo y al hardware subyacente. De forma predeterminada, el acceso a los archivos está restringido a varias ubicaciones predeterminadas, como los directorios Documentos o Imágenes. [13]
Las aplicaciones WinRT para Windows RT, Windows 8 y posteriores están empaquetadas en .appx
formato de archivo; basado en las convenciones de empaquetado abierto , utiliza un formato ZIP con archivos XML agregados. [14] Las aplicaciones WinRT se distribuyen principalmente a través de una tienda de aplicaciones llamada Microsoft Store , donde los usuarios pueden descargar y comprar el software WinRT (denominado aplicaciones de la Tienda Windows ). Las aplicaciones WinRT solo se pueden descargar desde fuera de la Tienda Windows en sistemas Windows 8 o RT que forman parte de un dominio de Windows , o están equipadas con una clave de activación especial obtenida de Microsoft. [15] [16] [17] [18]
En una desviación importante de Win32 y de manera similar a .NET Framework 4.5 , la mayoría de las API que se espera que tomen un tiempo significativo para completarse se implementan como asincrónicas . La aplicación envía la llamada a la API, que regresa inmediatamente, liberando la aplicación para realizar otras tareas mientras espera los resultados. [19] El modelo asincrónico requiere nuevas construcciones de lenguaje de programación (palabra clave async
y operador await
en C # y Visual Basic, clase task
y método .then
en C ++, que son proporcionados por el kit de desarrollo de software (SDK) de WinRT , clase Promise
y método .then
en JavaScript-HTML5), similar a try
/ catch
utilizado en el manejo de excepciones . Las partes de la API que necesitan acceso asincrónico incluyen mensajes y diálogos en pantalla, acceso a archivos, conectividad a Internet, enchufes, transmisiones, dispositivos y servicios, y calendario, contactos y citas.
Servicios
Metadatos
Los metadatos describen el código escrito para la plataforma WinRT. Define un modelo de programación que hace posible escribir código orientado a objetos que se puede compartir entre lenguajes de programación y habilita servicios como la reflexión .
Herb Sutter , experto en C ++ de Microsoft , explicó durante su sesión sobre C ++ en la conferencia Build 2011 que los metadatos de WinRT tienen el mismo formato que los metadatos de CLI . [9] El código nativo (es decir, el código de máquina específico del procesador) no puede contener metadatos, por lo que se almacena en archivos WINMD separados que pueden reflejarse como ensamblajes CLI ordinarios . [20]
Debido a que se trata de metadatos CLI, el código escrito en lenguajes WinRT nativos se puede utilizar desde lenguajes CLI administrados .
Tipo de sistema
WinRT tiene un rico sistema de tipos basado en clases orientado a objetos que se basa en los metadatos. Admite construcciones con las construcciones correspondientes en el marco .NET: clases , métodos , propiedades , delegados y eventos .
Una de las principales adiciones a WinRT en relación con COM es la interfaz binaria de aplicaciones cruzadas (ABI), genéricos de estilo .NET . En C ++ / CX estos se declaran usando la palabra clave generic
con una sintaxis muy similar a la de la palabra clave template
. Las clases de WinRT (clases de referencia) también se pueden generalizar utilizando plantillas de C ++, pero solo las instancias de plantilla se pueden exportar a metadatos .winmd (con algunos cambios de nombre ), a diferencia de los genéricos de WinRT que conservan su carácter genérico en los metadatos. WinRT también proporciona una biblioteca de contenedores genéricos que son paralelos a los de la biblioteca estándar de C ++ y algunas funciones de conversión recíprocas (de ida y vuelta). El consumo de colecciones de WinRT en lenguajes .NET (por ejemplo, C # y VB) y en JavaScript es más transparente que en C ++, con mapeos automatizados en sus equivalentes naturales que ocurren detrás de escena. Al crear un componente WinRT en un lenguaje administrado, se deben seguir algunas reglas adicionales de estilo COM, por ejemplo, los tipos de colección de marcos .NET no se pueden declarar como tipos de retorno, pero solo las interfaces WinRT que implementan se pueden usar en el límite del componente.
Componentes de WinRT
Las clases que se compilan para apuntar a WinRT se denominan componentes de WinRT . Son clases que se pueden escribir en cualquier idioma compatible y para cualquier plataforma compatible. La clave son los metadatos. Estos metadatos permiten interactuar con el componente desde cualquier otro idioma WinRT. El tiempo de ejecución requiere componentes WinRT que están construidos con .NET Framework para usar los tipos de interfaz definidos o interfaces de tipo .NET, que se asignan automáticamente al primero nombrado. La herencia aún no se admite en los componentes administrados de WinRT, excepto para las clases XAML. [21]
Interfaces de programación
Los programas y bibliotecas destinados al tiempo de ejecución de WinRT se pueden crear y consumir desde varias plataformas y lenguajes de programación. En particular, C / C ++ (ya sea con extensiones de lenguaje que ofrecen soporte de primera clase para conceptos de WinRT, o con una biblioteca de plantillas de nivel inferior que permite escribir código en C ++ estándar), .NET ( C # y Visual Basic .NET (VB.NET)) y JavaScript . Esto es posible gracias a los metadatos.
En la terminología de WinRT, un enlace de lenguaje se denomina proyección de lenguaje .
C ++ (C ++ / WinRT, extensiones de componentes, WRL)
Native C ++ es un ciudadano de primera clase de la plataforma WinRT. A partir de la versión 10.0.17134.0 (Windows 10, versión 1803), el SDK de Windows contiene C ++ / WinRT. C ++ / WinRT es una proyección de lenguaje C ++ 17 moderna completamente estándar para las API de Windows Runtime (WinRT), implementada como una biblioteca basada en archivos de encabezado y diseñada para proporcionar acceso de primera clase a la API de Windows moderna. Con C ++ / WinRT, las API de Windows Runtime se pueden crear y consumir utilizando cualquier compilador C ++ 17 compatible con los estándares. WinRT es una plataforma nativa y admite cualquier código C ++ nativo (y estándar), de modo que un desarrollador de C ++ puede reutilizar las bibliotecas C / C ++ nativas existentes. Con C ++ / WinRT, no hay extensiones de idioma.
Antes de que C ++ / WinRT se lanzara oficialmente en el SDK de Windows, a partir de octubre de 2016, [22] Microsoft ofrecía GitHub C ++ / WinRT. [23] No se basa en código C ++ / CX, con el resultado de producir binarios más pequeños y código más rápido. [24]
Hay otras dos opciones heredadas para usar WinRT desde C ++: WRL, una biblioteca de plantillas de estilo ATL y C ++ / CX (C ++ con extensiones de componentes) que se asemeja a C ++ / CLI. [25] Debido a los requisitos de consumo interno en Microsoft, WRL está libre de excepciones, lo que significa que su disciplina de valor de retorno se basa en HRESULT al igual que la de COM. [26] C ++ / CX, por otro lado, concluye las llamadas a WinRT con código que verifica los errores y arroja excepciones según corresponda. [27]
C ++ / CX tiene varias extensiones que permiten la integración con la plataforma y su sistema de tipos. La sintaxis se parece a la de C ++ / CLI aunque produce código y metadatos nativos (aunque no estándar) que se integran con el tiempo de ejecución. Por ejemplo, los objetos WinRT se pueden asignar con ref new
, que es la contraparte de gcnew
C ++ / CLI. El operador hat ^
conserva su significado, sin embargo, en el caso de que tanto el llamador como el destinatario estén escritos en C ++ y vivan en el mismo proceso, una referencia hat es simplemente un puntero a un vptr a una tabla de método virtual (vtable, VMT). [27]
Junto con C ++ / CX, en relación con la programación COM tradicional de C ++, hay clases parciales , nuevamente inspiradas en .NET. Estos permiten que el código XAML de la instancia se traduzca a código C ++ mediante herramientas y luego se combine con código escrito por humanos para producir la clase completa al tiempo que permite una separación limpia de las partes generadas por máquina y editadas por humanos de una implementación de clase en diferentes archivos.
.NETO
El .NET Framework y el tiempo de ejecución de lenguaje común (CLR) se integran en el WinRT como subplataforma. Ha influido y establecido los estándares para el ecosistema a través del formato de metadatos y las bibliotecas. El CLR proporciona servicios como código de compilación JIT y recolección de basura . Las aplicaciones WinRT que usan lenguajes .NET usan el nuevo marco XAML en tiempo de ejecución de Windows y están escritas principalmente en C #, VB.NET y, por primera vez, para XAML, con código nativo que usa C ++ / CX. Aunque aún no se admite oficialmente, los programas también se pueden escribir en otros lenguajes .NET.
Limitaciones
Las clases definidas en componentes WinRT que se crean en lenguajes .NET administrados deben declararse como sealed
, por lo que no se pueden derivar de. Sin embargo, las clases WinRT no selladas definidas en otro lugar pueden heredarse en .NET, sus métodos virtuales anulados, etc. pero la clase administrada heredada aún debe estar sellada.
Los miembros que interactúan con otro idioma deben tener una firma con tipos de WinRT o un tipo administrado que sea convertible a estos. [21]
JavaScript
Las aplicaciones WinRT también se pueden codificar usando HTML con JavaScript en código subyacente , que se ejecutan usando el motor de renderizado Trident y el motor Chakra JavaScript, los cuales también son usados por Internet Explorer . Al codificar una aplicación WinRT en JavaScript, sus características se adaptan para seguir las convenciones de nomenclatura de JavaScript, y los espacios de nombres también se asignan a objetos de JavaScript.
Otros idiomas
Microsoft está proyectando las API de WinRT en lenguajes distintos de C ++. Un ejemplo es Rust / WinRT, una interfaz para programas escritos en Rust para usar las API de WinRT. [28] Rust / WinRT es parte de Project Reunion, un esfuerzo de Microsoft para reconciliar las plataformas Win32 y WinRT. [29]
Puentes
Con la introducción de la Plataforma universal de Windows (UWP), WinRT ha recibido muchos puentes API que permiten que los programas originalmente codificados para otros lenguajes se transfieran fácilmente mientras se aprovechan las características de UWP. Microsoft ha proporcionado puentes para Android (desaparecido desde 2016), iOS ( Cocoa Touch ), Progressive Web Apps , Silverlight , así como aplicaciones de escritorio basadas en Win32 estándar de bog (utilizando el paquete MSIX de Project Reunion).
API
WinRT viene con una interfaz de programación de aplicaciones (API) en forma de biblioteca de clases que expone las características de Windows 8 para el desarrollador, como su API de interfaz inmersiva. Es accesible y consumible desde cualquier idioma admitido.
Clases en tiempo de ejecución
Las clases de Windows Runtime son un conjunto de SDK que brindan acceso a todas las funciones, desde el analizador XAML hasta la función de la cámara. Los SDK se implementan como bibliotecas nativas de C / C ++ (no administradas).
Convenciones de nombres
Las convenciones de nomenclatura para los componentes (clases y otros miembros) en la API están fuertemente influenciadas por las convenciones de nomenclatura de .NET que usan camel case (específicamente PascalCase). Microsoft recomienda a los usuarios que sigan estas reglas en caso de que no se den otras.
Estas convenciones se proyectan de manera diferente en algunos lenguajes, como JavaScript, que lo convierte a sus convenciones y al revés. Esto es para brindar una experiencia nativa y consistente independientemente del lenguaje de programación.
Restricciones y reglas
Dado que Windows Runtime se proyecta en varios idiomas, existen algunas restricciones sobre los tipos de datos fundamentales para alojar todos esos idiomas. Los programadores deben tener cuidado con el comportamiento de esos tipos cuando se utilizan con acceso público (para parámetros de métodos, valores de retorno de métodos, propiedades, etc.). [30]
- Tipos basicos
- En los lenguajes .NET y C ++, existe un rico conjunto de tipos de datos, que representan varios números.
- En JavaScript, a
Number
solo puede representar hasta 53 bits de precisión. - En WinRT, el único tipo de datos numérico que falta es el entero de 8 bits con signo relativo a .NET y C ++. Los desarrolladores de JavaScript deben tener cuidado al tratar con números grandes mientras codifican para WinRT.
- Instrumentos de cuerda
- Las cadenas son inmutables en .NET y JavaScript, pero mutables en C ++.
- Un puntero nulo pasado como una cadena a WinRT por C ++ se convierte en una cadena vacía
- En .Net, el nulo que se pasa como una cadena a WinRT se convierte en una cadena vacía
- En JavaScript, el nulo que se pasa como una cadena a WinRT se convierte en una cadena con la palabra
null
. Esto se debe a que la palabra clave de JavaScriptnull
se representa como un objeto nulo. Se producen resultados similares al pasarundefined
a WinRT desde JavaScript. - Estructuras
- En .NET y C ++, las estructuras son tipos de valor, y dicha estructura puede contener cualquier tipo.
- JavaScript no admite estructuras directamente.
- En WinRT, el uso de estructuras solo está permitido para contener tipos que tienen semántica de valor, incluidos números, cadenas y otras estructuras. No se permiten punteros o referencias de interfaz.
- Referencias
- En .NET, los objetos se pasan por referencia, mientras que los números y las estructuras se pasan por valor.
- En C ++, todos los tipos se pueden pasar por referencia o valor.
- En WinRT, las interfaces se pasan por referencia; todos los demás tipos se pasan por valor.
- Matrices
- En .NET, C ++ y JavaScript las matrices son tipos de referencia.
- En WinRT, las matrices son tipos de valor.
- Eventos
- En .NET y C ++, los clientes se suscriben a eventos mediante
+=
operator. - En JavaScript, la propiedad de
addEventListener
función o configuraciónon
se usa para suscribirse a eventos. - En WinRT, todos los idiomas pueden utilizar su propia forma de suscribirse a eventos.
- Colecciones
- Algunas colecciones de .NET se asignan directamente a las colecciones de WinRT.
- El tipo de vector WinRT se asemeja a las matrices y la sintaxis de la matriz se utiliza para consumirlas.
- El tipo de mapa de WinRT es una colección de pares clave / valor y se proyecta como diccionario en idiomas .NET.
- Sobrecarga de métodos
- Todos los lenguajes WinRT (.NET, C ++, JavaScript) admiten la sobrecarga de parámetros
- .NET y C ++ también admiten la sobrecarga de tipos.
- En WinRT, solo se utiliza el número de parámetro para la sobrecarga.
- Asincronía
- Todos los métodos de WinRT están diseñados de manera que cualquier método que tarde más de 50 milisegundos sea un método asíncrono.
- El patrón de nomenclatura establecido para distinguir los métodos asincrónicos es
. Para la biblioteca de tiempo de ejecución completa, todos los métodos que tienen la posibilidad de durar más de 50 ms se implementan solo como métodos asincrónicos.[ ]Async
Historial de versiones
Versión de Windows | |
---|---|
Windows 8 | Tiempo de ejecución de Windows |
Windows 8.1 | |
Windows 10 | Plataforma universal de Windows (UWP) |
Tiempo de ejecución de Windows Phone
A partir de Windows Phone 8 , es posible desarrollar aplicaciones utilizando una versión de Windows Runtime llamada Windows Phone Runtime (WPRT). Aunque WP8 trajo soporte limitado, la plataforma finalmente convergió con Windows 8.1 en Windows Phone 8.1 .
Windows Phone 8
Windows Phone 8 tiene soporte limitado para desarrollar y consumir componentes de Windows Runtime a través de Windows Phone Runtime . Muchas de las API de Windows Runtime en Windows 8 que manejan funciones centrales del sistema operativo se han adaptado a Windows Phone 8. [31] Se ha agregado soporte para desarrollar juegos nativos usando C ++ / CX y DirectX, a pedido de la industria de desarrollo de juegos.
Sin embargo, Windows Phone XAML Framework todavía se basa en el mismo marco de Microsoft Silverlight , como en Windows Phone 7, para compatibilidad con versiones anteriores. Así, a partir de 2016[actualizar], El desarrollo de XAML es imposible en C ++ / CX. El desarrollo con HTML5 o WinJS no es compatible con Windows Phone 8.
Windows Phone 8.1
El soporte de Windows Runtime en Windows Phone 8.1 converge con Windows 8.1. La versión trae una API de Windows Runtime completa a la plataforma, incluida la compatibilidad con Windows Runtime XAML Framework y enlaces de idioma para C ++ / CX y HTML5 - JavaScript . También hay un tipo de proyecto llamado Aplicaciones universales para permitir que las aplicaciones compartan código en las versiones 8.1 de Windows Phone y Windows.
Se ha actualizado Silverlight Framework para Windows Phone 8. [ cuando? ] Puede aprovechar algunas de las nuevas funciones de Windows Runtime.
Windows Phone Runtime usa el formato de paquete AppX de Windows 8, después de haber usado anteriormente Silverlight XAP .
Ver también
- Marco XAML de Windows Runtime
Referencias
- ^ Avram, Abel (21 de septiembre de 2011). "Detalles de diseño de Windows Runtime" . InfoQ .
- ^ Klug, Brian; Smith, Ryan (13 de septiembre de 2011). "Microsoft Build: Windows 8, una vista previa Pre-Beta" . AnandTech .
- ^ "Referencia de la API de Windows Phone" . Referencia de la API de Windows Phone . Microsoft . 21 de julio de 2014.
- ^ a b Michael, Mayberry (2012). WinRT revelado . Ciudad de Nueva York: Apress . pag. 3. ISBN 978-1-4302-4585-8.
- ^ "Creación de aplicaciones Win32 (C ++)" . MSDN . Microsoft . Consultado el 12 de enero de 2014 .
- ^ "Archivos de metadatos de Windows (WinMD)" . Referencia de API para aplicaciones para UWP. Microsoft Docs . Consultado el 20 de julio de 2019 .
- ^ De Icaza, Miguel (15 de septiembre de 2011). "WinRT desmitificado" . Blog personal de Miguel de Icaza . Autoeditado . Consultado el 15 de enero de 2014 .
- ^ "¿Cuál es la sobrecarga de cálculo de referencias COM al llamar a la API de WinRT desde C #?" . Foro de MSDN . Autoeditado . 20 de septiembre de 2011 . Consultado el 15 de enero de 2014 .
- ^ a b "Usando el tiempo de ejecución de Windows desde C ++ | Build2011 | Channel 9" . Channel9.msdn.com. 2011-09-14 . Consultado el 24 de abril de 2012 .
- ^ Sivakumar, Nish (29 de septiembre de 2011). "Visual C ++ y WinRT / Metro - Algunos fundamentos - CodeProject®" . Codeproject.com . Consultado el 24 de abril de 2012 .
- ^ "Usando el tiempo de ejecución de Windows desde C ++ | Build2011 | Channel 9" . Channel9.msdn.com. 2011-09-14 . Consultado el 24 de abril de 2012 .
- ^ "Introducción a C ++ / WinRT - Aplicaciones de Windows UWP" . docs.microsoft.com . Microsoft.
- ^ lastnameholiu. "Permisos de acceso a archivos: aplicaciones para UWP" . docs.microsoft.com . Consultado el 8 de agosto de 2020 .
- ^ "Diseño de un paquete de aplicaciones simple y seguro - APPX" . Blog de desarrolladores de aplicaciones de Windows 8 . Consultado el 30 de diciembre de 2013 .
- ^ "Cómo agregar y quitar aplicaciones" . TechNet . Microsoft. 31 de mayo de 2012 . Consultado el 4 de octubre de 2012 .
Para habilitar la descarga en una computadora con Windows 8 Enterprise que no está unida a un dominio o en cualquier computadora con Windows® 8 Pro, debe usar una clave de activación del producto de descarga. Para habilitar la descarga lateral en un dispositivo Windows® RT, debe utilizar una clave de activación del producto de descarga lateral. Para obtener más información sobre la transferencia de claves de activación de productos, consulte Licencias por volumen de Microsoft.
- ^ "Windows 8: El lío de Metro" . Revista de PC . Consultado el 8 de septiembre de 2012 .
- ^ "Microsoft ahora usa 'Modern UI Style' para referirse a las aplicaciones de Windows 8 'Metro Style'" . Consultado el 10 de agosto de 2012 .
- ^ "¿Qué es una aplicación de Microsoft Store?" . Centro de desarrollo de Windows . Consultado el 1 de octubre de 2012 .
- ^ "Programación asincrónica (aplicaciones de la Tienda Windows)" . MSDN . Microsoft . Consultado el 12 de enero de 2014 .
- ^ ".NET obtiene una nueva vida" . Archivado desde el original el 24 de septiembre de 2011 . Consultado el 16 de septiembre de 2011 .
- ^ a b "Uso de Windows Runtime desde C # y Visual Basic | Build2011 | Canal 9" . Channel9.msdn.com. 2011-09-14 . Consultado el 24 de abril de 2012 .
- ^ "Versión preliminar inicial de C ++ / WinRT" . github.com. 2016-10-05 . Consultado el 5 de octubre de 2016 .
- ^ "C ++ / WinRT es una proyección de lenguaje C ++ estándar para Windows Runtime" . github.com. 2016-09-14 . Consultado el 14 de septiembre de 2016 .
- ^ "C ++ estándar y Windows Runtime (C ++ / WinRT)" . blogs.windows.com. 2016-11-28 . Consultado el 28 de noviembre de 2016 .
- ^ "Dentro del diseño de C ++ / CX - Blog del equipo de Visual C ++ - Inicio del sitio - Blogs de MSDN" . Blogs.msdn.com. 2011-10-20 . Consultado el 24 de abril de 2012 .
- ^ Charles (26 de octubre de 2011). "GoingNative 3: El episodio de C ++ / CX con Marian Luparu | C9 :: GoingNative | Canal 9" . Channel9.msdn.com . Consultado el 24 de abril de 2012 .
- ^ a b Bajo las sábanas con C ++ para aplicaciones de estilo Metro con Deon Brewis en // Build
- ^ "microsoft / winrt-rs" . GitHub .
- ^ "microsoft / ProjectReunion: una evolución de la plataforma de desarrollo de Windows que la hará más compatible, ágil, moderna y abierta" . GitHub .
- ^ "Diez consejos al escribir una aplicación estilo Metro de lenguaje híbrido - Build2011 - Channel 9" . Canal 9 . Microsoft.
- ^ "API de tiempo de ejecución de Windows Phone" . microsoft.com . Microsoft.
enlaces externos
- Página web oficial