Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Med C#/WinRT kan utvecklare använda .NET till att skapa egna Windows Runtime-komponenter med hjälp av C# i ett klassbiblioteksprojekt. Författade komponenter kan användas i inbyggda skrivbordsprogram som en paketreferens eller som en projektreferens, med några ändringar.
Den här genomgången visar hur du skapar en enkel Windows Runtime komponent med C#/WinRT, distribuerar komponenten som ett NuGet-paket och använder komponenten från ett C++/WinRT-konsolprogram. Det fullständiga exemplet som innehåller koden för den här artikeln finns i C#/WinRT-redigeringsexemplet. Mer information om redigering finns i Authoring-komponenter.
En genomgång av hur du skapar WinUI 3-kontroller med C#/WinRT specifikt för användning i Windows App SDK-applikationer finns i artikeln Walkthrough: Author a C# component with WinUI controls and consume from a C++ Windows App SDK application
Förutsättningar
Den här genomgången kräver följande verktyg och komponenter:
- Visual Studio 2022
- .NET 6.0 SDK eller senare
- C++/WinRT VSIX för C++/WinRT project mallar
Skapa en enkel Windows Runtime komponent med C#/WinRT
Börja med att skapa en ny project i Visual Studio. Välj mallen Class Library project och namnge project AuthoringDemo. Du måste göra följande tillägg och ändringar i project:
TargetFrameworkUppdatera i filen AuthoringDemo.csproj och lägg till följande element iPropertyGroup:<PropertyGroup> <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework> <Platforms>x64</Platforms> </PropertyGroup>För att få åtkomst till Windows Runtime-typer måste du ställa in en viss Windows SDK-version i TFM. Mer information om vilken version som stöds finns i .NET 6 och senare: Använd TFM-alternativet.
Installera NuGet-paketet Microsoft.Windows.CsWinRT i projektet.
a. I Solution Explorer högerklickar du på noden project och väljer Hantera NuGet-paket.
b) Sök efter NuGet-paketet Microsoft.Windows.CsWinRT och installera den senaste versionen. Den här genomgången använder C#/WinRT version 1.4.1.
Lägg till ett nytt
PropertyGroupelement som anger egenskapenCsWinRTComponent. Detta anger att din project är en Windows Runtime komponent så att en.winmd-fil genereras när du skapar project.<PropertyGroup> <CsWinRTComponent>true</CsWinRTComponent> </PropertyGroup>En fullständig lista över egenskaper för C#/WinRT project finns i dokumentationen C#/WinRT NuGet.
Du kan skapa dina körningsklasser med hjälp av klassfiler från bibliotek
.cs. Högerklicka på filen och byt namn påClass1.csden tillExample.cs. Lägg till följande kod i den här filen, vilken lägger till en offentlig egenskap och metod till runtime-klassen. Kom ihåg att markera alla klasser som du vill exponera i körningskomponenten sompublic.namespace AuthoringDemo { public sealed class Example { public int SampleProperty { get; set; } public static string SayHello() { return "Hello from your C# WinRT component"; } } }Nu kan du skapa projektet för att generera filen
.winmdför komponenten. Högerklicka på project i Solution Explorer och klicka på Build. I utdatamappen för byggprocessen kommer du att se den genereradeAuthoringDemo.winmd-filen.
Generera ett NuGet-paket för komponenten
De flesta utvecklare vill distribuera och dela sin Windows Runtime komponent som ett NuGet-paket. Ett annat alternativ är att använda komponenten som en projektreferens. Följande steg visar hur du paketerar AuthoringDemo-komponenten . När du genererar paketet konfigurerar C#/WinRT komponenten och värdsammansättningarna i paketet för att aktivera förbrukning från interna program.
Det finns flera sätt att generera NuGet-paketet:
Om du vill generera ett NuGet-paket varje gång du skapar project lägger du till följande egenskap i filen AuthoringDemo project och återskapar sedan project.
<PropertyGroup> <GeneratePackageOnBuild>true</GeneratePackageOnBuild> </PropertyGroup>Du kan också generera ett NuGet-paket genom att högerklicka på AuthoringDemo project i Solution Explorer och välja Pack.
När du skapar paketet bör fönstret Skapa ange att NuGet-paketet AuthoringDemo.1.0.0.nupkg har skapats. Mer information om NuGet-paketegenskaper med .NET CLI finns i Skapa ett paket med dotnet CLI.
Utnyttja komponenten från en C++/WinRT-app
C#/WinRT-redigerade Windows Runtime komponenter kan användas från valfritt Windows Runtime (WinRT)-kompatibelt språk. Följande steg visar hur du anropar den skapade komponenten ovan i ett C++/WinRT-konsolprogram.
Anmärkning
Användning av en C#/WinRT-komponent från C#/.NET-appar stöds av både paketreferens och projektreferens. Det här scenariot motsvarar användning av vanliga C#-klassbibliotek och innebär i de flesta fall inte WinRT-aktivering. Från och med C#/WinRT 1.3.5 kräver projektreferenser för C#-konsumenter .NET 6.
Lägg till ett nytt C++/WinRT-konsolprogram project i lösningen. Observera att det här projektet även kan ingå i en annan lösning om du väljer det.
a. Högerklicka på lösningsnoden i Solution Explorer och klicka på Lägg till ->Ny Project.
b) I dialogrutan Lägg till ny Project söker du efter mallen C++/WinRT Console Application project. Välj mallen och klicka på Nästa.
Punkt c Namnge det nya projektet CppConsoleApp och klicka på Skapa.
Lägg till en referens till AuthoringDemo-komponenten, antingen som ett NuGet-paket eller en project referens.
Alternativ 1 (paketreferens):
a. Högerklicka på CppConsoleApp project och välj Hantera NuGet-paket. Du kan behöva konfigurera paketkällorna för att lägga till en referens till AuthoringDemo NuGet-paketet. To do detta klickar du på ikonen Inställningar i NuGet Package Manager och lägger till en paketkälla i rätt sökväg.
b) När du har konfigurerat paketkällorna söker du efter AuthoringDemo-paketet och klickar på Installera.
Option 2 (Project referens):
a. Högerklicka på CppConsoleApp project och välj Add ->Reference. Under noden Projects lägger du till en referens till noden AuthoringDemo project.
För att vara värd för komponenten måste du lägga till en manifestfil för aktiverbara klassregistreringar. Mer information om värdhantering av hanterade komponenter finns i Hanterad komponentvärd.
a. Om du vill lägga till manifestfilen högerklickar du igen på project och väljer Lägg till -> Nytt objekt. Sök efter textfilmallen och ge den namnet CppConsoleApp.exe.manifest. Klistra in följande innehåll som anger körningsklasserna med hjälp av aktiverade klassregistreringsposter:
<?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>Programmanifestfilen krävs för appar som inte är paketerade. För paketerade appar måste appkonsumenten registrera de aktiverbara klasserna i sin
Package.appxmanifestpaketmanifestfil, enligt beskrivningen i Walkthrough: Skapa en C#-komponent med WinUI-kontroller och använda från ett C++ Windows App SDK-program.b) Ändra project så att manifestfilen inkluderas i utdata när du distribuerar project. Klicka på filen CppConsoleApp.exe.manifest i Solution Explorer och ange egenskapen Content till True. Här är ett exempel på hur detta ser ut.
Öppna pch.h under projektets Header-filer och lägg till följande kodrad för att inkludera din komponent.
#include <winrt/AuthoringDemo.h>Öppna main.cpp under project källfiler och ersätt det med följande innehåll.
#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; }Skapa och kör CppConsoleApp project. Nu bör du se utdata nedan.
Relaterade ämnen
Windows developer