Udostępnij za pośrednictwem


Przewodnik — tworzenie składnika C#/WinRT i korzystanie z niego z języka C++/WinRT

C#/WinRT umożliwia deweloperom używającym .NET tworzenie własnych komponentów Windows Runtime w C# z użyciem projektu biblioteki klas. Utworzone składniki mogą być używane w aplikacjach natywnych jako odwołanie do pakietu lub jako odwołanie do projektu z kilkoma modyfikacjami.

W tym przewodniku pokazano, jak utworzyć prosty składnik Windows Runtime przy użyciu języka C#/WinRT, dystrybuować składnik jako pakiet NuGet i korzystać ze składnika z poziomu aplikacji konsolowej C++/WinRT. Pełny przykład zawierający kod tego artykułu można znaleźć w przykładzie C#/WinRT authoring sample. Aby uzyskać więcej informacji na temat tworzenia, zobacz Authoring components.

Aby zapoznać się z przewodnikiem dotyczącym tworzenia kontrolek WinUI 3 z językiem C#/WinRT przeznaczonym specjalnie do użytku w aplikacjach Windows App SDK, zapoznaj się z artykułem Walkthrough: Tworzenie składnika języka C# za pomocą kontrolek WinUI i korzystanie z aplikacji Windows App SDK języka C++

Wymagania wstępne

Ten przewodnik wymaga następujących narzędzi i składników:

Tworzenie prostego składnika Windows Runtime przy użyciu języka C#/WinRT

Zacznij od utworzenia nowego project w Visual Studio. Wybierz szablon Class Library project i nadaj nazwę project AuthoringDemo. Należy wprowadzić następujące dodatki i modyfikacje do projektu:

  1. Zaktualizuj TargetFramework w pliku AuthoringDemo.csproj i dodaj następujące elementy do PropertyGroup:

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

    Aby uzyskać dostęp do typów Windows Runtime, należy ustawić określoną wersję zestawu Windows SDK w TFM. Aby uzyskać więcej informacji na temat obsługiwanej wersji, zobacz .NET 6 i nowszych: Użyj opcji TFM.

  2. Zainstaluj pakiet Microsoft.Windows.CsWinRT NuGet w project.

    a. W Solution Explorer kliknij prawym przyciskiem myszy węzeł project i wybierz pozycję Zarządzaj pakietami NuGet.

    b. Wyszukaj pakiet NuGet Microsoft.Windows.CsWinRT i zainstaluj najnowszą wersję. W tym przewodniku użyto języka C#/WinRT w wersji 1.4.1.

  3. Dodaj nowy PropertyGroup element, który ustawia CsWinRTComponent właściwość . To określenie oznacza, że projekt jest składnikiem Windows Runtime, tak aby plik .winmd został wygenerowany podczas budowania projektu.

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

    Pełną listę właściwości projektu C#/WinRT można znaleźć w dokumentacji C#/WinRT NuGet.

  4. Możesz opracowywać swoje klasy środowiska uruchomieniowego używając biblioteki plików klas .cs. Kliknij prawym przyciskiem myszy Class1.cs plik i zmień jego nazwę na Example.cs. Dodaj następujący kod do tego pliku, który dodaje właściwość publiczną i metodę do klasy środowiska uruchomieniowego. Pamiętaj, aby oznaczyć wszystkie klasy, które chcesz uwidocznić w składniku środowiska uruchomieniowego jako public.

    namespace AuthoringDemo
    {
        public sealed class Example
        {
            public int SampleProperty { get; set; }
    
            public static string SayHello()
            {
                return "Hello from your C# WinRT component";
            }
        }
    }
    
  5. Teraz możesz skompilować projekt, aby wygenerować plik .winmd dla składnika. Kliknij prawym przyciskiem myszy projekt w Solution Explorer i kliknij pozycję Zbuduj. W folderze wyjściowym kompilacji zostanie wyświetlony wygenerowany AuthoringDemo.winmd plik.

Generowanie pakietu NuGet dla składnika

Większość deweloperów chce dystrybuować i udostępniać swój składnik Windows Runtime jako pakiet NuGet. Inną opcją jest użycie komponentu jako odwołania do projektu. W poniższych krokach pokazano, jak spakować składnik AuthoringDemo . Podczas generowania pakietu, C#/WinRT konfiguruje składnik i zestawy hostujące w pakiecie, aby umożliwić użycie przez aplikacje natywne.

Istnieje kilka sposobów generowania pakietu NuGet:

  • Jeśli chcesz wygenerować pakiet NuGet za każdym razem, gdy tworzysz project, dodaj następującą właściwość do pliku AuthoringDemo project a następnie ponownie skompiluj project.

    <PropertyGroup>
        <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
    </PropertyGroup>
    
  • Możesz też wygenerować pakiet NuGet, klikając prawym przyciskiem myszy AuthoringDemo project w Solution Explorer i wybierając Pack.

Podczas kompilowanie pakietu okno Kompilacja powinno wskazywać, że pakiet AuthoringDemo.1.0.0.nupkg NuGet został pomyślnie utworzony. Zobacz Utwórz pakiet przy użyciu interfejsu wiersza polecenia dotnet aby uzyskać więcej informacji na temat właściwości pakietu NuGet za pomocą interfejsu wiersza polecenia platformy .NET.

Użytkowanie składnika z aplikacji C++/WinRT

Składniki Windows Runtime utworzone przez język C#/WinRT mogą być używane z dowolnego języka zgodnego z Windows Runtime (WinRT). W poniższych krokach pokazano, jak wywołać utworzony składnik powyżej w aplikacji konsolowej C++/WinRT.

Uwaga / Notatka

Korzystanie ze składnika C#/WinRT z aplikacji C#/.NET jest obsługiwane przez odwołanie do pakietu lub projektu. Ten scenariusz jest odpowiednikiem używania dowolnej zwykłej biblioteki klas języka C# i w większości przypadków nie obejmuje aktywacji winRT. Począwszy od C#/WinRT 1.3.5, odwołania do projektów dla użytkowników C# wymagają .NET 6.

  1. Dodaj nowy projekt aplikacji konsolowej C++/WinRT do rozwiązania. Należy pamiętać, że ten project może być również częścią innego rozwiązania, jeśli tak wybierzesz.

    a. W Solution Explorer kliknij prawym przyciskiem myszy węzeł rozwiązania i kliknij Dodaj ->Nowy Project.

    b. W oknie dialogowym Dodaj nowy Project wyszukaj szablon C++/WinRT Console Application project. Wybierz szablon i kliknij przycisk Dalej.

    c. Nadaj nowemu projektowi CppConsoleApp i kliknij Utwórz.

  2. Dodaj odwołanie do składnika AuthoringDemo jako pakiet NuGet lub odwołanie do projektu.

    • Opcja 1 (referencja do pakietu):

      a. Kliknij prawym przyciskiem myszy CppConsoleApp project i wybierz pozycję Zarządzaj pakietami NuGet. Może być konieczne skonfigurowanie źródeł pakietów w celu dodania odwołania do pakietu NuGet AuthoringDemo. Aby to zrobić, kliknij ikonę Settings w Menadżerze pakietów NuGet i dodaj źródło pakietu do odpowiedniej ścieżki.

      Ustawienia narzędzia NuGet

      b. Po skonfigurowaniu źródeł pakietów wyszukaj pakiet AuthoringDemo i kliknij pozycję Zainstaluj.

      Instalowanie pakietu NuGet

    • Option 2 (odniesienie do projektu):

      a. Kliknij prawym przyciskiem myszy CppConsoleApp project a następnie wybierz Dodaj ->Reference. W węźle Projects dodaj odwołanie do AuthoringDemo project.

  3. Aby hostować składnik, należy dodać plik manifestu na potrzeby rejestracji aktywowanych klas. Aby uzyskać więcej informacji na temat hostingu składników zarządzanych, zobacz Zarządzany hosting składników.

    a. Aby dodać plik manifestu, ponownie kliknij prawym przyciskiem myszy project i wybierz pozycję Dodaj -> Nowy element. Wyszukaj szablon pliku tekstowego i nadaj mu nazwę CppConsoleApp.exe.manifest. Wklej następującą zawartość, która określa klasy środowiska uruchomieniowego poprzez wpisy rejestracyjne aktywujących klas.

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

    Plik manifestu aplikacji jest wymagany w przypadku aplikacji, które nie są spakowane. W przypadku spakowanych aplikacji aplikacja consumer musi zarejestrować klasy możliwe do aktywowania w pliku manifestu pakietu Package.appxmanifest, zgodnie z opisem w Walkthrough: Tworzenie składnika C# za pomocą kontrolek WinUI i korzystanie z aplikacji Windows App SDK C++.

    b. Zmodyfikuj projekt, aby uwzględnić plik manifestu w rezultatach podczas wdrażania projektu. Kliknij plik CppConsoleApp.exe.manifest w Solution Explorer i ustaw właściwość Content na True. Oto przykład tego, jak to wygląda.

    wdrożenie zawartości

  4. Otwórz pch.h w sekcji Pliki nagłówkowe projektu i dodaj następujący wiersz kodu, aby dołączyć swój komponent.

    #include <winrt/AuthoringDemo.h>
    
  5. Otwórz plik main.cpp w plikach źródłowych project i zastąp go następującą zawartością.

    #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. Skompiluj i uruchom CppConsoleApp project. Teraz powinieneś widzieć dane wyjściowe poniżej.

    Dane wyjściowe konsoli C++/WinRT