Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
C#/WinRT permite a los desarrolladores usar .NET 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 SDK de Aplicaciones para Windows, consulte el artículo Walkthrough: Crear un componente de C# con controles WinUI y consumir desde una aplicación de SDK de Aplicaciones para Windows de C++
Prerrequisitos
Este tutorial requiere las siguientes herramientas y componentes:
- Visual Studio 2022 o posterior
- SDK de .NET 8.0 (LTS) 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 proyecto 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, debe establecer una versión específica del SDK de Windows 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 Microsoft.Windows. CsWinRT paquete NuGet en el proyecto.
a) En Explorador de soluciones, haga clic con el botón derecho en el nodo del proyecto y seleccione Administrar paquetes NuGet.
b. Busque el Microsoft.Windows.CsWinRT paquete NuGet e instale la versión más reciente.
Agregue un nuevo
PropertyGroupelemento que establezca laCsWinRTComponentpropiedad . Esto especifica que su 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 proyecto en Explorador de soluciones 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 proyecto AuthoringDemo en Explorador de soluciones 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 consumidores de C# requieren .NET 6 o posterior.
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 Explorador de soluciones, 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 aplicación de consola C++/WinRT. 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 ello, haga clic en el icono Settings de NuGet Administrador de paquetes 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.
Opción 2 (referencia del 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 aplicaciones debe registrar las clases activables en su archivo de manifiesto de paquete
Package.appxmanifest, como se explica en el tutorial Crear un componente de C# con controles WinUI y consumirlo desde una aplicación de C++ SDK de Aplicaciones para Windows.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 Explorador de soluciones 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
Windows developer