Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
C#/WinRT umožňuje vývojářům, kteří používají .NET vytvářet vlastní komponenty prostředí Windows Runtime v jazyce C# pomocí projektu knihovny tříd. Vytvořené komponenty je možné využívat v nativních desktopových aplikacích jako odkaz na balíček nebo jako odkaz na project s několika úpravami.
Tento návod ukazuje, jak vytvořit jednoduchou komponentu prostředí Windows Runtime pomocí C#/WinRT, distribuovat komponentu jako balíček NuGet a využívat ji z konzolové aplikace C++/WinRT. Úplnou ukázku, která obsahuje kód pro tento článek, najdete v ukázce vytváření obsahu C#/WinRT. Další podrobnosti o vytváření najdete v tématu Authoring components.
Návod k vytváření ovládacích prvků WinUI 3 pomocí jazyka C#/WinRT speciálně pro použití v aplikacích Windows App SDK najdete v článku Walkthrough: Vytvoření komponenty jazyka C# s ovládacími prvky WinUI a využití z aplikace Windows App SDK C++
Požadavky
Tento názorný postup vyžaduje následující nástroje a komponenty:
- Visual Studio 2022 nebo novější
- .NET 8.0 SDK (LTS) nebo novější
- C++/WinRT VSIX pro projektové šablony C++/WinRT
Vytvoření jednoduché komponenty prostředí Windows Runtime pomocí C#/WinRT
Začněte vytvořením nového projektu v Visual Studio. Vyberte šablonu knihovny tříd a pojmenujte projekt AuthoringDemo. Budete muset provést následující přídavky a úpravy projektu:
Aktualizujte prvek
TargetFrameworkv souboru AuthoringDemo.csproj a přidejte následující prvky doPropertyGroup:<PropertyGroup> <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework> <Platforms>x64</Platforms> </PropertyGroup>Pokud chcete získat přístup k prostředí Windows Runtime typům, musíte v TFM nastavit konkrétní verzi sady WINDOWS SDK. Další podrobnosti o podporované verzi najdete v tématu .NET 6 a novější: Použijte možnost TFM.
Nainstalujte Microsoft.Windows. CsWinRT balíček NuGet ve vašem projektu.
a. V Průzkumník řešení klikněte pravým tlačítkem na uzel projektu a vyberte Manage NuGet Packages.
b) Vyhledejte Microsoft.Windows. CsWinRT balíček NuGet a nainstalujte nejnovější verzi.
Přidejte nový
PropertyGroupprvek, který nastavíCsWinRTComponentvlastnost. Určuje, že projekt je komponenta prostředí Windows Runtime, aby se při sestavování projektu vygeneroval soubor.winmd.<PropertyGroup> <CsWinRTComponent>true</CsWinRTComponent> </PropertyGroup>Úplný seznam vlastností projektu jazyka C#/WinRT najdete v dokumentaci C#/WinRT NuGet.
Třídy modulu runtime můžete vytvářet pomocí knihovny
.cssouborů tříd. Klikněte pravým tlačítkem myši naClass1.cssoubor a přejmenujte ho naExample.cs. Do tohoto souboru přidejte následující kód, který přidá veřejnou vlastnost a metodu do třídy runtime. Nezapomeňte označit všechny třídy, které chcete vystavit v komponentě runtime jakopublic.namespace AuthoringDemo { public sealed class Example { public int SampleProperty { get; set; } public static string SayHello() { return "Hello from your C# WinRT component"; } } }Teď můžete vytvořit project pro vygenerování souboru
.winmdpro vaši komponentu. Klikněte pravým tlačítkem na projekt v Průzkumník řešení a klikněte na Build. VygenerovanýAuthoringDemo.winmdsoubor se zobrazí ve výstupní složce sestavení.
Vygenerování balíčku NuGet pro komponentu
Většina vývojářů bude chtít distribuovat a sdílet svou prostředí Windows Runtime komponentu jako balíček NuGet. Další možností je použít komponentu jako odkaz projektu. Následující kroky ukazují, jak zabalit komponentu AuthoringDemo . Když balíček vygenerujete, C#/WinRT nakonfiguruje komponentu a hostování sestavení v balíčku tak, aby povolovala spotřebu z nativních aplikací.
Balíček NuGet můžete vygenerovat několika způsoby:
Pokud chcete vygenerovat balíček NuGet při každém sestavení project, přidejte do souboru AuthoringDemo project následující vlastnost a znovu sestavte project.
<PropertyGroup> <GeneratePackageOnBuild>true</GeneratePackageOnBuild> </PropertyGroup>Případně můžete vygenerovat balíček NuGet tak, že kliknete pravým tlačítkem na projekt AuthoringDemo v Průzkumník řešení a vyberete Pack.
Při sestavování balíčku by mělo okno Sestavení indikovat, že se balíček AuthoringDemo.1.0.0.nupkg NuGet úspěšně vytvořil. Další podrobnosti o vlastnostech balíčku NuGet pomocí .NET CLI najdete v tématu Vytvoření balíčku pomocí rozhraní příkazového řádku dotnet.
Používání komponenty ve aplikaci C++/WinRT
C#/WinRT vytvořené komponenty prostředí Windows Runtime je možné využívat z libovolného jazyka kompatibilního s prostředí Windows Runtime (WinRT). Následující kroky ukazují, jak volat výše vytvořené komponenty v konzolové aplikaci C++/WinRT.
Poznámka:
Použití komponenty C#/WinRT z aplikací C#/.NET je podporováno odkazem na balíček nebo odkazem na projekt. Tento scénář je ekvivalentem využívání jakékoli běžné knihovny tříd jazyka C# a ve většině případů nezahrnuje aktivaci WinRT. Od verze C#/WinRT 1.3.5 odkazy na projekty pro uživatele jazyka C# vyžadují .NET 6 nebo novější.
Přidejte do svého řešení novou konzolovou aplikaci C++/WinRT project. Všimněte si, že tento projekt může být také součástí jiného řešení, pokud si to přejete.
a. V Průzkumník řešení klikněte pravým tlačítkem na uzel řešení a klikněte na Add ->New Project.
b) V dialogovém okně Přidat novou Project vyhledejte šablonu C++/WinRT Console Application project. Vyberte šablonu a klikněte na Další.
c) Pojmenujte nový project CppConsoleApp a klikněte na Create.
Přidejte odkaz na komponentu AuthoringDemo, buď jako balíček NuGet, nebo jako odkaz na project.
Možnost 1 (odkaz na balíček)::
a. Klikněte pravým tlačítkem na CppConsoleApp project a vyberte balíčky NuGet Manage NuGet. Možná budete muset nakonfigurovat zdroje balíčků tak, aby přidaly odkaz na balíček AuthoringDemo NuGet. Uděláte to tak, že v Správce balíčků NuGetu kliknete na ikonu Settings a do příslušné cesty přidáte zdroj balíčku.
b) Po nakonfigurování zdrojů balíčků vyhledejte balíček AuthoringDemo a klikněte na Nainstalovat.
Možnost 2 (odkaz na projekt)::
a. Klikněte pravým tlačítkem na CppConsoleApp project a vyberte Přidat ->Reference. V uzlu Projekty přidejte odkaz na AuthoringDemo project.
Chcete-li hostovat komponentu, budete muset přidat soubor manifestu pro aktivaci registrace tříd. Další podrobnosti o hostování spravovaných komponent najdete v tématu Hostování spravovaných komponent.
a. Pokud chcete přidat soubor manifestu, znovu klikněte pravým tlačítkem na project a zvolte Přidat -> Nová položka. Vyhledejte šablonu textového souboru a pojmenujte ji CppConsoleApp.exe.manifest. Vložte následující obsah, který určuje třídy runtime pomocí aktivovatelných položek registrace třídy:
<?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>Soubor manifestu aplikace se vyžaduje pro aplikace, které nejsou zabalené. U zabalených aplikací musí spotřebitel aplikace zaregistrovat aktivovatelné třídy v souboru manifestu balíčku
Package.appxmanifest, jak je vysvětleno v tématu Walkthrough: Vytvoření komponenty jazyka C# s ovládacími prvky WinUI a využití z aplikace Windows App SDK C++.b) Při nasazování project upravte project tak, aby zahrnoval soubor manifestu ve výstupu. Klikněte na soubor CppConsoleApp.exe.manifest v Průzkumník řešení a nastavte vlastnost Content na True. Tady je příklad, jak to vypadá.
Otevřete pch.h pod hlavičkové soubory project a přidejte následující řádek kódu, který zahrne vaši komponentu.
#include <winrt/AuthoringDemo.h>Otevřete main.cpp pod zdrojovými soubory project a nahraďte ho následujícím obsahem.
#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; }Sestavte a spusťte CppConsoleApp project. Teď byste měli vidět následující výstup.
Související témata
Windows developer