Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
C#/WinRT позволяет разработчикам, использующим .NET, создавать собственные компоненты Windows Runtime на C# с помощью проекта библиотеки классов. Созданные компоненты можно использовать в нативных настольных приложениях в качестве ссылки на пакет или ссылки на проект с соответствующими изменениями.
В этом пошаговом руководстве показано, как создать простой компонент Windows Runtime с помощью C#/WinRT, распространить компонент в виде пакета NuGet и использовать компонент из консольного приложения C++/WinRT. Полный пример, предоставляющий код для этой статьи, см. в примере разработки C#/WinRT. Дополнительные сведения о разработке см. в разделе Authoring components.
Пошаговое руководство по созданию элементов управления WinUI 3 с помощью C#/WinRT специально для использования в приложениях Windows App SDK см. в статье Walkthrough: создание компонента C# с помощью элементов управления WinUI и использование из приложения Windows App SDK C++
Предпосылки
В этом пошаговом руководстве требуются следующие средства и компоненты:
- Visual Studio 2022
- SDK .NET 6.0 или более поздняя версия
- C++/WinRT VSIX для шаблонов project C++/WinRT
Создание простого компонента Windows Runtime с помощью C#/WinRT
Начните с создания нового project в Visual Studio. Выберите шаблон Class Library project и назовите шаблон project AuthoringDemo. Вам потребуется внести следующие дополнения и изменения в project:
Обновите
TargetFrameworkв файле AuthoringDemo.csproj и добавьте вPropertyGroupследующие элементы:<PropertyGroup> <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework> <Platforms>x64</Platforms> </PropertyGroup>Чтобы получить доступ к типам Windows Runtime, необходимо задать определенную версию пакета SDK Windows в TFM. Дополнительные сведения о поддерживаемой версии см. в разделе .NET 6 и более поздних версий. Используйте параметр TFM.
Установите Microsoft.Windows.CsWinRT пакет NuGet в project.
a. В Solution Explorer щелкните правой кнопкой мыши узел проекта и выберите Управление пакетами NuGet.
б. Найдите пакет NuGet Microsoft.Windows.CsWinRT и установите последнюю версию. В этом пошаговом руководстве используется C#/WinRT версии 1.4.1.
Добавьте новый
PropertyGroupэлемент, который задаетCsWinRTComponentсвойство. Это указывает, что ваш проект является компонентом Windows Runtime, так что файл.winmdбудет создан при сборке проекта.<PropertyGroup> <CsWinRTComponent>true</CsWinRTComponent> </PropertyGroup>Полный список свойств C#/WinRT project см. в документации C#/WinRT NuGet.
Классы среды выполнения можно создавать с помощью файлов классов библиотеки
.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"; } } }Теперь вы можете создать проект для генерации файла
.winmdдля вашего компонента. Щелкните правой кнопкой мыши на проекте в Solution Explorer и выберите Build. Вы увидите созданныйAuthoringDemo.winmdфайл в выходной папке сборки.
Создание пакета NuGet для компонента
Большинство разработчиков хотят распространять и делиться компонентом Windows Runtime в виде пакета NuGet. Другим вариантом является использовать компонент в качестве ссылки на проект. Ниже показано, как упаковать компонент AuthoringDemo . При создании пакета C#/WinRT настраивает компоненты и сборки размещения в пакете для обеспечения использования собственными приложениями.
Существует несколько способов создания пакета NuGet:
Если вы хотите создать пакет NuGet каждый раз, когда собираете проект, добавьте следующее свойство в файл проекта AuthoringDemo и затем перестройте проект.
<PropertyGroup> <GeneratePackageOnBuild>true</GeneratePackageOnBuild> </PropertyGroup>Кроме того, можно создать пакет NuGet правой кнопкой мыши, щелкнув AuthoringDemo project в Solution Explorer и выбрав Pack.
При сборке пакета окно сборки должно указать, что пакет AuthoringDemo.1.0.0.nupkg NuGet был успешно создан. Дополнительные сведения о свойствах пакета NuGet с использованием .NET CLI см. в разделе Создание пакета с помощью dotnet CLI.
Потребление компонента из приложения C++/WinRT
Компоненты Windows Runtime, созданные с помощью C#/WinRT, можно использовать из любого языка, совместимого с Windows Runtime (WinRT). Ниже показано, как вызвать указанный выше компонент в консольном приложении C++/WinRT.
Замечание
Использование компонента C#/WinRT в приложениях C#/.NET поддерживается как ссылкой на пакет, так и ссылкой на проект. Этот сценарий эквивалентен использованию любой обычной библиотеки классов C# и не включает активацию WinRT в большинстве случаев. Начиная с C#/WinRT 1.3.5, проектные ссылки для приложений на C# требуют .NET 6.
Добавьте в свое решение новый проект консольного приложения C++/WinRT. Обратите внимание, что этот проект также может быть частью другого решения, если вы так решите.
a. В Solution Explorer щелкните правой кнопкой мыши узел решения и щелкните Add ->New Project.
б. В диалоговом окне Add New Project найдите шаблон C++/WinRT Console Application project. Выберите шаблон и нажмите кнопку "Далее".
с. Назовите новый project CppConsoleApp и щелкните Create.
Добавьте ссылку на компонент AuthoringDemo в виде пакета NuGet или ссылки на проект.
Вариант 1 (Ссылка на пакет):
a. Щелкните правой кнопкой мыши на проекте CppConsoleApp и выберите Управление пакетами NuGet. Возможно, потребуется настроить источники пакетов, чтобы добавить ссылку на пакет NuGet AuthoringDemo. Чтобы сделать это, щелкните значок 'Настройки'
в NuGet Package Manager и добавьте источник пакета в нужный путь.
б. После конфигурирования источников пакетов найдите пакет AuthoringDemo и нажмите Установить.
Option 2 (ссылка на проект):
a. Щелкните правой кнопкой мыши CppConsoleApp project и выберите Add ->Reference. В узле Projects добавьте ссылку на AuthoringDemo project.
Чтобы разместить компонент, необходимо добавить файл манифеста для регистрации активируемых классов. Дополнительные сведения о размещении управляемых компонентов см. в разделе Управляемое размещение компонентов.
a. Чтобы добавить файл манифеста, снова щелкните правой кнопкой мыши project и выберите Add -> Новый элемент. Найдите шаблон текстового файла и назовите его 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, как объясняется в Пошаговое руководство: создание компонента C# с элементами управления WinUI и использование в приложении Windows App SDK на C++.б. Измените проект, чтобы файл манифеста был включен в выходные данные при развертывании проекта. Щелкните файл CppConsoleApp.exe.manifest в Solution Explorer и задайте для свойства Content значение True. Ниже приведен пример того, как это выглядит.
Откройте pch.h в файлах заголовков project и добавьте следующую строку кода, чтобы включить компонент.
#include <winrt/AuthoringDemo.h>Откройте main.cpp в исходных файлах project и замените его следующим содержимым.
#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; }Создайте и запустите CppConsoleApp project. Теперь вы увидите приведенные ниже выходные данные.
Связанные темы
Windows developer