Estoy tratando de entender el nuevo Windows 8 Runtime que se usa para crear aplicaciones de estilo Metro . Sé que puede usarlo con XAML y está basado en .NET, por lo que C # y VB.NET pueden usarse para escribir las aplicaciones, pero parece tener algo que ver con HTML, CSS, DOM y JavaScript.
¿Alguien puede explicar qué es en unos pocos párrafos, en términos que un programador de .NET UI pueda entender? (Me falta algo "clave" que es necesario para entenderlo).
Todos sabemos que WPF, Silverlight , Windows Forms , etc. seguirán funcionando bajo Windows 8 (y Windows 10) al menos en los sistemas Intel, así que no me digas eso ...
wpf
windows-runtime
windows-store-apps
windows-10
win-universal-app
Ian Ringrose
fuente
fuente
Windows.*
cubren los espacios de nombres. Hasta ahora, la terminología es algo confusa, ya que WinRT se refiere tanto a la tecnología como a todo el conjunto de bibliotecas estándar. Sin embargo, no creo que haya una etiqueta concisa solo para las bibliotecas de la interfaz de usuario (Windows.UI.*
).Respuestas:
En el nivel más bajo, WinRT es un modelo de objetos definido en el nivel ABI. Utiliza COM como base (por lo que cada objeto WinRT implementa
IUnknown
y realiza el recuento), y construye desde allí. Agrega muchos conceptos nuevos en comparación con los COM de antaño, la mayoría de los cuales provienen directamente de .NET; por ejemplo, el modelo de objetos WinRT tiene delegados y los eventos se realizan al estilo .NET (con delegados y agregar / eliminar suscriptores) métodos, uno por evento) en lugar del antiguo modelo COM de fuentes y sumideros de eventos. De otras cosas notables, WinRT también tiene interfaces parametrizadas ("genéricas").Otro gran cambio es que todos los componentes WinRT tienen metadatos disponibles para ellos, al igual que los ensamblados .NET. En COM, tenías eso con typelibs, pero no todos los componentes COM los tenían. Para WinRT, los metadatos están contenidos en archivos .winmd. Busque dentro de "C: \ Archivos de programa (x86) \ Windows Kits \ 8.0 \ Windows Metadata \" en Developer Preview. Si hurga, verá que en realidad son ensamblados de CLI sin código, solo tablas de metadatos. Puede abrirlos con ILDASM, de hecho. Tenga en cuenta que esto no significa que WinRT esté administrado, simplemente reutiliza el formato de archivo.
Luego, hay una serie de bibliotecas implementadas en términos de ese modelo de objetos, que definen las interfaces y clases de WinRT. Nuevamente, mire la carpeta "Metadatos de Windows" mencionada anteriormente para ver qué hay allí; o simplemente inicie Object Browser en VS y seleccione "Windows 8.0" en el selector de marco, para ver qué está cubierto. Hay mucho allí, y no se ocupa solo de la interfaz de usuario: también obtienes espacios de nombres como
Windows.Data.Json
, oWindows.Graphics.Printing
, oWindows.Networking.Sockets
.Luego obtienes varias bibliotecas, que se ocupan específicamente de la interfaz de usuario; en su mayoría, estos serían varios espacios de nombres bajo
Windows.UI
oWindows.UI.Xaml
. Muchos de ellos son muy similares a los espacios de nombres de WPF / Silverlight, por ejemplo,Windows.UI.Xaml.Controls
coinciden estrechamenteSystem.Windows.Controls
; lo mismo paraWindows.UI.Xaml.Documents
etc.Ahora, .NET tiene la capacidad de hacer referencia directa a los componentes WinRT como si fueran ensamblados .NET. Esto funciona de manera diferente a Interoperabilidad COM: no necesita ningún artefacto intermedio como ensamblajes de interoperabilidad, solo
/r
un archivo .winmd y todos los tipos y sus miembros en sus metadatos se vuelven visibles para usted como si fueran objetos .NET. Tenga en cuenta que las bibliotecas WinRT en sí son completamente nativas (por lo que los programas nativos de C ++ que usan WinRT no requieren CLR en absoluto): la magia para exponer todas esas cosas como se administran está dentro del CLR en sí, y es de nivel bastante bajo. Si ildasm un programa .NET que hace referencia a un .winmd, verás que en realidad se ve como una referencia de ensamblaje externo: no hay un juego de trucos de mano como la incrustación de tipos allí.Tampoco es un mapeo contundente: CLR intenta adaptar los tipos de WinRT a sus equivalentes, siempre que sea posible. Entonces, por ejemplo, se convierten en GUID, fechas y URI
System.Guid
,System.DateTime
ySystem.Uri
, respectivamente; Interfaces de colección WinRT tales comoIIterable<T>
yIVector<T>
BecomeIEnumerable<T>
yIList<T>
; y así. Esto va en ambos sentidos: si tiene un objeto .NET que se implementaIEnumerable<T>
y lo devuelve a WinRT, lo verá comoIIterable<T>
.En última instancia, lo que esto significa es que sus aplicaciones .NET Metro obtienen acceso a un subconjunto de las bibliotecas .NET estándar existentes, y también a las bibliotecas WinRT (nativas), algunas de las cuales, particularmente
Windows.UI
, se parecen mucho a Silverlight, API-wise. Todavía tiene XAML para definir su IU, y aún maneja los mismos conceptos básicos que en Silverlight: enlaces de datos, recursos, estilos, plantillas, etc. En muchos casos, es posible portar una aplicación Silverlight simplemente porusing
los nuevos espacios de nombres, y ajustar algunos lugares en el código donde se ajustó la API.WinRT en sí no tiene nada que ver con HTML y CSS, y tiene relación con JavaScript solo en el sentido de que también está expuesto allí, de manera similar a como se hace para .NET. No necesita lidiar con HTML / CSS / JS cuando usa las bibliotecas WinRT UI en su aplicación .NET Metro (bueno, supongo que si realmente quiere, puede alojar un
WebView
control ...). Todas sus habilidades de .NET y Silverlight siguen siendo muy relevantes en este modelo de programación.fuente
De la nota clave de Build :
Proporcionan API comunes tanto para aplicaciones HTML / CSS / JavaScript como para aplicaciones C # / XAML. Se usarán C # y XAML, pero no será WPF o Silverlight exactamente.
fuente
La idea clave es que ahora hay dos pistas de desarrollo: Desktop y Metro.
Algunos puntos importantes:
fuente
Popup
( msdn.microsoft.com/en-us/library/windows/apps/… ), así que si lo desea, puede cocinar algo parecido a MDI. Obviamente no se recomienda abusar de él, ya que corre el riesgo de terminar con una interfaz de usuario no táctil.localhost
, solo puede conectarse a la misma aplicación. Puede usar archivos normales en una de las "carpetas conocidas" compartidas (Documentos, Imágenes, etc.), pero ese es un truco bastante burdo que requiere sondeo y es visible para el usuario.Hay una versión modificada de la arquitectura que seguramente lo ayudará a comprender dónde se encuentran exactamente las cosas. Uno de los ninjas de Telerik conversó con el equipo de CLR y modificó la imagen:
Aquí puede ver dónde se encuentra el CLR. .NET Framework ahora tiene dos perfiles
1- Perfil de .NET Metro (CLR que se ocupa de la aplicación Metro)
2- Perfil de cliente .NET (tiempo de ejecución CLR para aplicaciones C # y VB.NET)
Espero que esto te dé una imagen más clara. Lea el artículo completo en Una mala imagen vale más que mil largas discusiones. .
fuente
Muchos detalles de Microsoft aquí .
En resumen, Windows Runtime es un nuevo conjunto de bibliotecas que expone la funcionalidad de Windows y está disponible para JavaScript / C # / VB / C ++. Se ha hecho que cada idioma los entienda y pueda llamarlos directamente en lugar de tener que pasar por una capa de thunking.
Silverlight y WPF son sabores de XAML que se ejecutan en el CLR. Entre otras funciones, Windows Runtime expone una versión de XAML muy similar a Silverlight, pero lo hace de forma nativa, no a través del CLR. Se puede acceder desde el CLR, pero también desde C ++.
fuente