Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
C#/WinRT permite a los desarrolladores usar .NET para crear sus propios componentes de Windows Runtime en C# mediante un proyecto de biblioteca de clases. Los componentes creados pueden ser utilizados en aplicaciones de escritorio nativas como referencia de paquete o como referencia de proyecto con algunas modificaciones.
En este tutorial se muestra cómo crear un componente de Windows Runtime simple mediante C#/WinRT, distribuir el componente como un paquete NuGet y consumir el componente desde una aplicación de consola de C++/WinRT. Para obtener el ejemplo completo que proporciona el código de este artículo, consulte el ejemplo de creación C#/WinRT. Para obtener más información sobre la creación, consulte Componentes de autoría.
Para ver un tutorial sobre la creación de controles WinUI 3 con C#/WinRT específicamente para su uso en aplicaciones Windows App SDK, consulte el artículo Walkthrough: Crear un componente de C# con controles WinUI y consumir desde una aplicación de Windows App SDK de C++
Prerrequisitos
Este tutorial requiere las siguientes herramientas y componentes:
- Visual Studio 2022
- SDK de .NET 6.0 o posterior
- C++/WinRT VSIX para plantillas de proyecto de C++/WinRT
Creación de un componente de Windows Runtime simple con C#/WinRT
Comience creando un nuevo project en Visual Studio. Seleccione la plantilla Class Library project y asigne el nombre project AuthoringDemo. Deberá realizar las siguientes adiciones y modificaciones al proyecto:
Actualice el
TargetFrameworken el archivo AuthoringDemo.csproj y agregue los siguientes elementos aPropertyGroup:<PropertyGroup> <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework> <Platforms>x64</Platforms> </PropertyGroup>Para acceder a los tipos de Windows Runtime, necesita configurar una versión específica de Windows SDK en el TFM. Para obtener más información sobre la versión compatible, consulte .NET 6 y versiones posteriores: Use la opción TFM.
Instale el paquete NuGet Microsoft.Windows.CsWinRT en el proyecto.
a) En Solution Explorer, haga clic con el botón derecho en el nodo project y seleccione Administrar paquetes NuGet.
b. Busque el paquete NuGet Microsoft.Windows.CsWinRT e instale la versión más reciente. En este tutorial se usa C#/WinRT versión 1.4.1.
Agregue un nuevo
PropertyGroupelemento que establezca laCsWinRTComponentpropiedad . Esto especifica que el proyecto es un componente de Windows Runtime para que se genere un archivo.winmdal compilar el proyecto.<PropertyGroup> <CsWinRTComponent>true</CsWinRTComponent> </PropertyGroup>Para obtener una lista completa de las propiedades del proyecto de C#/WinRT, consulte la documentación de C#/WinRT NuGet.
Puede crear sus clases en tiempo de ejecución mediante los archivos de clase de la biblioteca
.cs. Haga clic con el botón derecho en elClass1.csarchivo y cámbielo porExample.cs. Agregue el código siguiente a este archivo, que agrega una propiedad pública y un método a la clase en tiempo de ejecución. Recuerde marcar las clases que quiera exponer en el componente en tiempo de ejecución comopublic.namespace AuthoringDemo { public sealed class Example { public int SampleProperty { get; set; } public static string SayHello() { return "Hello from your C# WinRT component"; } } }Ahora puede compilar el proyecto para generar el archivo
.winmdpara su componente. Haga clic con el botón derecho en el project en Solution Explorer y haga clic en Build. Verá el archivo generadoAuthoringDemo.winmden la carpeta de salida de compilación.
Generación de un paquete NuGet para el componente
La mayoría de los desarrolladores querrán distribuir y compartir su componente de Windows Runtime como un paquete NuGet. Otra opción es consumir el componente como referencia de proyecto. En los siguientes pasos se muestra cómo empaquetar el componente AuthoringDemo. Al generar el paquete, C#/WinRT configura el componente y los ensamblados de host en el paquete para permitir su consumo desde aplicaciones nativas.
Hay varias maneras de generar el paquete NuGet:
Si desea generar un paquete NuGet cada vez que compile el project, agregue la siguiente propiedad al archivo AuthoringDemo project y vuelva a generar el project.
<PropertyGroup> <GeneratePackageOnBuild>true</GeneratePackageOnBuild> </PropertyGroup>Como alternativa, puede generar un paquete NuGet haciendo clic con el botón derecho en el AuthoringDemo project en Solution Explorer y seleccionando Pack.
Cuando se construya el paquete, la ventana Compilación debe indicar que el paquete NuGet AuthoringDemo.1.0.0.nupkg se creó correctamente. Consulte Crear un paquete mediante la CLI de dotnet para obtener más información sobre las propiedades del paquete NuGet con la CLI de .NET.
Consumo del componente desde una aplicación de C++/WinRT
Los componentes de Windows Runtime creados de C#/WinRT se pueden consumir desde cualquier lenguaje compatible con Windows Runtime (WinRT). En los pasos siguientes se muestra cómo llamar al componente creado anteriormente en una aplicación de consola de C++/WinRT.
Nota:
El consumo de un componente de C#/WinRT desde aplicaciones de C#/.NET es compatible tanto con la referencia de paquete como con la referencia de proyecto. Este escenario equivale a consumir cualquier biblioteca de clases de C# normal y no implica la activación de WinRT en la mayoría de los casos. A partir de C#/WinRT 1.3.5, las referencias de proyecto para los consumidores de C# requieren .NET 6.
Agregue un nuevo proyecto de aplicación de consola C++/WinRT a su solución. Tenga en cuenta que este proyecto también puede formar parte de una solución diferente si así lo desea.
a) En Solution Explorer, haga clic con el botón derecho en el nodo de la solución y haga clic en Agregar ->Nuevo Project.
b. En el cuadro de diálogo Agregar nuevo Proyecto, busque la plantilla de proyecto C++/WinRT Console Application. Seleccione la plantilla y haga clic en Siguiente.
c. Asigne al nuevo nombre project CppConsoleApp y haga clic en Crear.
Agregue una referencia al componente AuthoringDemo, ya sea como un paquete NuGet o una referencia de project.
Opción 1 (Referencia del paquete)::
a) Haga clic con el botón derecho en el CppConsoleApp project y seleccione Administrar paquetes NuGet. Es posible que necesite configurar las fuentes de su paquete para añadir una referencia al paquete NuGet "AuthoringDemo". Para hacer esto, haga clic en el icono Configuración del Administrador de paquetes de NuGet y agregue un origen de paquete a la ruta de acceso adecuada.
b. Después de configurar los orígenes del paquete, busque el paquete AuthoringDemo y haga clic en Instalar.
Option 2 (referencia de Proyecto):
a) Haga clic con el botón derecho en el CppConsoleApp project y seleccione Agregar ->Reference. En el nodo Projects, agregue una referencia al AuthoringDemo project.
Para hospedar el componente, deberá agregar un archivo de manifiesto para los registros de clases activables. Para obtener más información sobre el hospedaje de componentes administrados, consulte Managed component hosting.
a) Para agregar el archivo de manifiesto, haga clic con el botón derecho en el project y elija Agregar -> Nuevo elemento. Busque la plantilla Archivo de texto y asígnela el nombre CppConsoleApp.exe.manifest. Pegue el siguiente contenido, que especifica las clases en tiempo de ejecución mediante entradas de registro de clases activables:
<?xml version="1.0" encoding="utf-8"?> <assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"> <assemblyIdentity version="1.0.0.0" name="CppConsoleApp"/> <file name="WinRT.Host.dll"> <activatableClass name="AuthoringDemo.Example" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1" /> </file> </assembly>El archivo de manifiesto de aplicación es necesario para las aplicaciones que no están empaquetadas. En el caso de las aplicaciones empaquetadas, el consumidor de la aplicación debe registrar las clases activables en su archivo de manifiesto de paquete
Package.appxmanifest, como se explica en Walkthrough: Crear un componente de C# con controles WinUI y consumir desde una aplicación de Windows App SDK de C++.b. Modifique el proyecto para incluir el archivo de manifiesto en la salida al desplegar el proyecto. Haga clic en el archivo CppConsoleApp.exe.manifest en Solution Explorer y establezca la propiedad Content en True. Este es un ejemplo de cómo se ve esto.
Abra pch.h en los archivos de encabezado del project y agregue la siguiente línea de código para incluir el componente.
#include <winrt/AuthoringDemo.h>Abra main.cpp en los archivos de origen del project y reemplácelo por el siguiente contenido.
#include "pch.h" #include "iostream" using namespace winrt; using namespace Windows::Foundation; int main() { init_apartment(); AuthoringDemo::Example ex; ex.SampleProperty(42); std::wcout << ex.SampleProperty() << std::endl; std::wcout << ex.SayHello().c_str() << std::endl; }Compile y ejecute el CppConsoleApp project. Ahora debería ver la salida siguiente.
salida de la consola de C++/WinRT
Temas relacionados
- Código de ejemplo
- componentes de creación
- Hospedaje de componentes administrados