共用方式為


逐步解說- 建立 C#/WinRT 元件,並從 C++/WinRT 取用它

C#/WinRT 可讓使用 .NET 的開發人員使用類別庫專案,在 C# 中撰寫自己的 Windows 運行時間元件。 撰寫的元件可以在原生桌面應用程式中使用,作為套件參考,或者在經過一些修改後作為專案參考。

本教程將示範如何使用 C#/WinRT 建立簡單的 Windows 執行階段元件,將元件分發為 NuGet 套件,並從 C++/WinRT 控制台應用程式使用元件。 如需提供本文程序代碼的完整範例,請參閱 C#/WinRT 撰寫範例。 如需撰寫相關的詳細資訊,請參閱 撰寫元件

如需使用 C#/WinRT 撰寫 WinUI 控件以特別用於 Windows App SDK 應用程式的逐步解說,請參閱本文 逐步解說:使用 WinUI 3 控件撰寫 C# 元件,並從 C++ Windows App SDK 應用程式取用

先決條件

本逐步解說需要下列工具和元件:

使用 C#/WinRT 建立簡單的 Windows 執行時間元件

從在Visual Studio中建立新項目開始。 選取 類別庫 專案範本,並將專案命名為 AuthoringDemo。 您必須對項目進行下列新增和修改:

  1. TargetFramework更新 AuthoringDemo.csproj 檔案中的 ,並將下列元素新增至 PropertyGroup

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

    若要存取 Windows 執行時間類型,您必須在 TFM 中設定特定的 Windows SDK 版本。 如需支援版本的詳細資訊,請參閱 .NET 6 和更新版本:使用 TFM 選項

  2. 在您的專案中安裝 Microsoft.Windows.CsWinRT NuGet 套件。

    一。 在 [方案總管] 中,於專案節點上按一下滑鼠右鍵,然後選擇 [管理 NuGet 套件]

    b。 搜尋 Microsoft.Windows.CsWinRT NuGet 套件並安裝最新版本。 本教學使用 C#/WinRT 版本 1.4.1。

  3. 新增設定 PropertyGroup 屬性的新 CsWinRTComponent 元素。 這會指定您的專案是 Windows 執行時間元件, .winmd 以便在建置項目時產生檔案。

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

    如需 C#/WinRT 專案屬性的完整清單,請參閱 C#/WinRT NuGet 檔。

  4. 您可以使用庫 .cs 類別檔案來撰寫執行時類別。 以滑鼠右鍵按下 Class1.cs 檔案,並將重新命名為 Example.cs。 將下列程式代碼新增至這個檔案,將公用屬性和方法新增至運行時間類別。 請記得將您要在執行時間元件中公開的任何類別標示為 public

    namespace AuthoringDemo
    {
        public sealed class Example
        {
            public int SampleProperty { get; set; }
    
            public static string SayHello()
            {
                return "Hello from your C# WinRT component";
            }
        }
    }
    
  5. 您現在可以建置項目來產生 .winmd 元件的檔案。 以滑鼠右鍵按兩下 [方案總管 ]中的項目,然後按兩下 [建置]。 您會在組建輸出資料夾中看到產生的 AuthoringDemo.winmd 檔案。

為這個元件產生 NuGet 套件

大部分的開發人員都想將其 Windows 運行時元件散布及共享成 NuGet 套件。 另一個選項是取用元件做為項目參考。 下列步驟示範如何封裝 AuthoringDemo 元件。 當您產生封裝時,C#/WinRT 會配置套件中的元件與承載組件,以啟用原生應用程式的取用。

有數種方式可以產生 NuGet 套件:

  • 如果您想要在每次建置項目時產生 NuGet 套件,請將下列屬性新增至 AuthoringDemo 專案檔,然後重建專案。

    <PropertyGroup>
        <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
    </PropertyGroup>
    
  • 或者,您可以在 [方案總管] 中,以滑鼠右鍵按兩下 AuthoringDemo 項目,然後選取 [套件],以產生 NuGet 套件。

當您編譯套件時,[編譯] 視窗應該會顯示已成功建立 NuGet 套件 AuthoringDemo.1.0.0.nupkg。 如需使用 .NET CLI 的 NuGet 套件屬性的詳細資訊,請參閱 使用 dotnet CLI 建立套件。

從 C++/WinRT 應用程式取用元件

C#/WinRT 撰寫的 Windows 執行階段元件可以從任何 Windows 執行階段(WinRT)相容的語言取用。 下列步驟示範如何在 C++/WinRT 控制台應用程式中呼叫上述撰寫的元件。

備註

可透過套件參考或專案參考來支援從 C#/.NET 應用程式取用 C#/WinRT 元件。 此案例相當於取用任何一般 C# 類別庫,而且在大部分情況下不會牽涉到 WinRT 啟用。 從 C#/WinRT 1.3.5 開始,C# 開發人員的專案參考需要 .NET 6。

  1. 將新的 C++/WinRT 控制台應用程式 專案新增至您的解決方案。 請注意,如果您選擇此專案,也可以是不同解決方案的一部分。

    一。 在 [方案總管]中,以滑鼠右鍵按兩下您的方案節點,然後按兩下 [新增 ->[新增專案]

    b。 在 [ 新增專案] 對話框中,搜尋 C++/WinRT 控制台應用程式 專案範本。 選取範本,然後按 下一步

    丙. 將新專案命名為 CppConsoleApp,然後點擊 建立

  2. 將 AuthoringDemo 元件的參考新增至 NuGet 套件或專案參考。

    • 選項 1 (套件參考)

      一。 滑鼠右鍵按一下 CppConsoleApp 專案,然後選擇 [管理 NuGet 套件]。 您可能需要設定套件來源,以添加對 AuthoringDemo NuGet 套件的引用。 若要這樣做,請按兩下 NuGet 套件管理員中的 [設定 ] 圖示,並將套件來源新增至適當的路徑。

      NuGet 設定

      b。 設定套件來源之後,請搜尋 AuthoringDemo 套件,然後點擊 [安裝]

      安裝 NuGet 套件

    • 選項 2 (項目參考)

      一。 以滑鼠右鍵按兩下 CppConsoleApp 項目,然後選取 [新增 ->參考]。 在 [專案] 節點下,新增對 AuthoringDemo 項目的參考。

  3. 若要裝載元件,您必須新增一個用於可啟用類別註冊的組態檔。 如需受控元件裝載的詳細資訊,請參閱 受控元件裝載

    一。 若要新增指令清單檔,請再次以滑鼠右鍵點擊專案,然後選擇 [新增] ->[新增項目]。 搜尋 文字檔 範本,並將它命名為 CppConsoleApp.exe.manifest。 貼上下列內容,這些內容使用可啟動類別註冊項目來指定執行階段類別:

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

    未封裝的應用程式需要應用程式指令清單檔。 針對已封裝的應用程式,應用程式取用者必須在其 Package.appxmanifest 套件指令清單檔案中註冊可啟動的類別,如 逐步解說:使用 WinUI 3 控件建立 C# 元件,並從 C++ Windows App SDK 應用程式取用中所述。

    b。 修改專案,以在部署專案時將指令清單檔包含在輸出中。 點選 [方案總管 ] 中的 CppConsoleApp.exe.manifest 檔案,並將 [Content] 屬性設定為 True。 以下是其外觀的範例。

    部署內容

  4. 在專案的頭檔底下開啟 pch.h ,並新增下列程式代碼行以包含您的元件。

    #include <winrt/AuthoringDemo.h>
    
  5. 開啟 專案 來源檔案底下的main.cpp,並將它取代為下列內容。

    #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. 建置並執行 CppConsoleApp 專案。 您現在應該會看到下列輸出。

    C++/WinRT 控制台輸出