.NET deja de tener compatibilidad integrada con WinRT
Se ha quitado la compatibilidad integrada para el consumo de las API Windows en tiempo de ejecución (WinRT) en .NET.
Versión introducida
5.0
Descripción del cambio
Anteriormente, CoreCLR podía consumir archivos de metadatos de Windows (WinMD) con el fin de activar y consumir tipos de WinRT. A partir de la versión .NET 5, CoreCLR ya no puede consumir archivos WinMD directamente.
Si se intenta hacer referencia a un ensamblado no admitido, se obtendrá FileNotFoundException, mientras que, si se activa una clase WinRT, se obtendrá PlatformNotSupportedException.
Este cambio importante se ha realizado por los siguientes motivos:
- Para que WinRT se pueda desarrollar y mejorar por separado del entorno de ejecución de .NET.
- Para favorecer la simetría con sistemas de interoperabilidad proporcionados para otros sistemas operativos, como iOS y Android.
- Para aprovechar las ventajas de otras características de .NET, como las características de C#, el recorte de lenguaje intermedio (IL) y la compilación de antemano (AOT).
- Para simplificar el código base del entorno de ejecución de .NET.
Acción recomendada
Quite las referencias al paquete Microsoft.Windows.SDK.Contracts. En su lugar, especifique la versión de las API de Windows a las que quiera acceder a través de la propiedad
TargetFramework
del proyecto. Por ejemplo:<TargetFramework>net5.0-windows10.0.19041.0</TargetFramework>
Si usa un componente de runtime de terceros que está definido en un archivo .winmd, agregue una referencia al paquete Microsoft.Windows.CsWinRT de NuGet. Para información sobre cómo genera la proyección de C#, consulte la documentación de C#/WinRT.
Para más información, vea Llamada a las a API de Windows Runtime en aplicaciones de escritorio.