Útmutató – C#/WinRT-összetevő létrehozása és felhasználása A C++/WinRT használatával

A C#/WinRT lehetővé teszi a .NET használó fejlesztők számára, hogy saját Windows-futtatókörnyezet-összetevőket írjanak c# nyelven egy osztálytárprojekt használatával. A létrehozott összetevők felhasználhatók natív asztali alkalmazásokban csomaghivatkozásként vagy project hivatkozásként néhány módosítással.

Ez az útmutató bemutatja, hogyan hozhat létre egy egyszerű Windows-futtatókörnyezet összetevőt a C#/WinRT használatával, hogyan terjesztheti az összetevőt NuGet-csomagként, és hogyan használhatja fel az összetevőt egy C++/WinRT-konzolalkalmazásból. A cikkhez írt kód teljes mintáját lásd a C#/WinRT szerzői minta. A komponens-szerkesztéssel kapcsolatos további részletekért lásd: Komponensek szerkesztése.

A C#/WinRT-vel történő WinUI 3 vezérlők létrehozásáról és Windows App SDK alkalmazásokban való használatáról szóló útmutatóért tekintse meg a cikket: Útmutató: C# összetevő létrehozása WinUI vezérlőkkel és C++ Windows App SDK alkalmazásból való használat

Előfeltételek

Ehhez az útmutatóhoz a következő eszközökre és összetevőkre van szükség:

Egyszerű Windows-futtatókörnyezet-összetevő létrehozása a C#/WinRT használatával

Először hozzon létre egy új projektet Visual Studio. Válassza ki a Osztálytár project sablont, és nevezze el a project AuthoringDemo nevet. A projekten a következő kiegészítéseket és módosításokat kell elvégezni:

  1. A TargetFramework fájlban frissítse a -t, és a következő elemeket adja hozzá a PropertyGroup-hoz:

    <PropertyGroup>
        <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
        <Platforms>x64</Platforms>
    </PropertyGroup>
    

    A Windows-futtatókörnyezet típusok eléréséhez be kell állítania egy adott Windows SDK-verziót a TFM-ben. A támogatott verzióról további információt a .NET 6-os és újabb verzióiban talál: A TFM beállítás használata.

  2. Telepítse a Microsoft.Windows.CsWinRT NuGet-csomagot a projekthez.

    a). A Megoldáskezelő kattintson a jobb gombbal a projektcsomópontra, és válassza a Manage NuGet Packages lehetőséget.

    b. Keresse meg a Microsoft.Windows. CsWinRT NuGet-csomag, és telepítse a legújabb verziót.

  3. Adjon hozzá egy új PropertyGroup elemet, amely beállítja a tulajdonságot CsWinRTComponent . Ez azt határozza meg, hogy a projekt egy Windows-futtatókörnyezet összetevő, így a projekt létrehozásakor létrejön egy .winmd fájl.

    <PropertyGroup>   
        <CsWinRTComponent>true</CsWinRTComponent>
    </PropertyGroup>
    

    A C#/WinRT projekt tulajdonságainak teljes listájáért tekintse meg a C#/WinRT NuGet dokumentációt.

  4. A futtatókörnyezeti osztályokat tárosztályfájlok .cs használatával is létrehozhatja. Kattintson a jobb gombbal a Class1.cs fájlra, és nevezze át a fájlra Example.cs. Adja hozzá a következő kódot ehhez a fájlhoz, amely hozzáad egy nyilvános tulajdonságot és metódust a futtatókörnyezeti osztályhoz. Ne felejtse el megjelölni azokat az osztályokat, amelyeket elérhetővé szeretne tenni a futtatási komponensben public.

    namespace AuthoringDemo
    {
        public sealed class Example
        {
            public int SampleProperty { get; set; }
    
            public static string SayHello()
            {
                return "Hello from your C# WinRT component";
            }
        }
    }
    
  5. Most már létrehozhatja a projektet az összetevő .winmd fájljának létrehozásához. Kattintson a jobb gombbal a projektre a Megoldáskezelő, majd a Build elemre. A létrehozott AuthoringDemo.winmd fájl megjelenik a build kimeneti mappájában.

NuGet-csomag létrehozása az összetevőhöz

A fejlesztők többsége NuGet-csomagként szeretné terjeszteni és megosztani Windows-futtatókörnyezet összetevőjét. Egy másik lehetőség az összetevő project hivatkozásként való felhasználása. Az alábbi lépések bemutatják, hogyan csomagolhatja be a AuthoringDemo összetevőt. A csomag létrehozásakor a C#/WinRT konfigurálja az összetevőt és a csomagban található összeszereléseket, hogy lehetővé tegye a natív alkalmazások általi használatot.

A NuGet-csomag többféleképpen is létrehozható:

  • Ha a project minden létrehozásakor létre szeretne hozni egy NuGet-csomagot, adja hozzá a következő tulajdonságot a AuthoringDemo project fájlhoz, majd építse újra a project.

    <PropertyGroup>
        <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
    </PropertyGroup>
    
  • Másik lehetőségként létrehozhat Egy NuGet-csomagot úgy is, hogy a jobb gombbal a AuthoringDemo projektre kattint a Megoldáskezelő és kiválasztja a Pack lehetőséget.

A csomag létrehozásakor a Build ablaknak azt kell jeleznie, hogy a NuGet-csomag AuthoringDemo.1.0.0.nupkg sikeresen létrejött. A NuGet-csomag tulajdonságairól a .NET parancssori felülettel A dotnet CLI használatával történő létrehozását ismertető cikkben talál további információt.

C++/WinRT alkalmazásban lévő összetevő felhasználása

A C#/WinRT által készített Windows-futtatókörnyezet összetevők bármilyen Windows-futtatókörnyezet (WinRT)-kompatibilis nyelvről használhatók. Az alábbi lépések bemutatják, hogyan hívhatja meg a fent leírt összetevőt egy C++/WinRT-konzolalkalmazásban.

Megjegyzés:

A C#/WinRT-összetevők C#/.NET-alkalmazásokból való használatát a csomagreferenciák és a projekthivatkozások egyaránt támogatják. Ez a forgatókönyv egyenértékű bármely szokásos C#-osztálykódtár használatával, és a legtöbb esetben nem jár WinRT-aktiválással. A C#/WinRT 1.3.5 verziótól kezdve a C#-felhasználók projekthivatkozásaihoz 6-os vagy újabb .NET kell.

  1. Adjon hozzá egy új C++/WinRT-konzolalkalmazást a projektjéhez. Vegye figyelembe, hogy ez a project is része lehet egy másik megoldásnak, ha ezt választja.

    a). A Megoldáskezelő-ben kattintson a jobb gombbal a megoldáscsomópontra, és kattintson a Add ->New Project.

    b. A Add New Project dialog box keresse meg a C++/WinRT Konzolalkalmazás project sablont. Jelölje ki a sablont, és kattintson a Tovább gombra.

    c) Nevezze el az új project CppConsoleApp nevet, majd kattintson a Create elemre.

  2. Adjon hozzá egy hivatkozást a AuthoringDemo összetevőre NuGet-csomagként vagy project hivatkozásként.

    • 1. lehetőség (csomaghivatkozás):

      a). Kattintson a jobb gombbal a CppConsoleApp project és válassza a Manage NuGet-csomagok lehetőséget. Előfordulhat, hogy konfigurálnia kell a csomagforrásokat, hogy hivatkozást adjon hozzá a AuthoringDemo NuGet-csomaghoz. Ehhez kattintson a Settings ikonra a NuGet Csomagkezelő, és adjon hozzá egy csomagforrást a megfelelő elérési úthoz.

      NuGet-beállítások

      b. A csomagforrások konfigurálása után keresse meg a AuthoringDemo csomagot, és kattintson a Telepítés gombra.

      NuGet-csomag telepítése

    • Option 2 (Projekt hivatkozás):

      a). Kattintson a jobb gombbal a CppConsoleApp project elemre, és válassza a Add ->Reference lehetőséget. A Projektek csomópontban adjon hozzá egy hivatkozást a AuthoringDemo project.

  3. Az összetevő üzemeltetéséhez hozzá kell adnia egy jegyzékfájlt az aktiválható osztályregisztrációkhoz. A felügyelt összetevők üzemeltetésével kapcsolatos további információkért lásd: A felügyelt összetevők üzemeltetése.

    a). A jegyzékfájl hozzáadásához kattintson ismét a jobb gombbal a project, és válassza a Add -> Új elem lehetőséget. Keresse meg a Szövegfájl sablont, és nevezze ki CppConsoleApp.exe.manifest. Illessze be a következő tartalmat, amely aktiválható osztályregisztrációs bejegyzésekkel adja meg a futtatókörnyezeti osztályokat:

    <?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>
    

    A nem csomagolt alkalmazásokhoz az alkalmazásjegyzékfájl szükséges. A csomagolt alkalmazások esetében az alkalmazásfelhasználónak regisztrálnia kell az aktiválható osztályokat a Package.appxmanifest csomagjegyzékfájljában, ahogyan az Útmutató: C#-összetevő létrehozása WinUI-vezérlőkkel és felhasználása egy C++ Windows App SDK alkalmazásból című részben magyarázzuk.

    b. Módosítsa a project úgy, hogy a jegyzékfájl szerepeljen a kimenetben a project telepítésekor. Kattintson a CppConsoleApp.exe.manifest fájlra Megoldáskezelő, és állítsa a Content tulajdonságot True értékre. Íme egy példa arra, hogyan néz ki ez.

    Tartalom üzembe helyezése

  4. Nyissa meg pch.h a project fejlécfájljai alatt, és adja hozzá a következő kódsort az összetevő hozzáadásához.

    #include <winrt/AuthoringDemo.h>
    
  5. Nyissa meg main.cpp a project forrásfájljai alatt, és cserélje le a következő tartalomra.

    #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;
    }
    
  6. Hozza létre és futtassa a CppConsoleApp project. Most az alábbi kimenetnek kell megjelennie.

    C++/WinRT-konzol kimenete