Дополнительные пакеты с исполняемым кодом

Необязательные пакеты с исполняемым кодом полезны для деления большого или сложного приложения или добавления в приложение, которое уже опубликовано. С помощью Visual Studio 2017 версии 15.7 и .NET Native 2.1 можно загрузить исполняемый код из дополнительных пакетов C++ и C#.

Необходимые компоненты

  • Visual Studio 2019 или Visual Studio 2017 (версия 15.7 или более поздняя версия)
  • Windows 10 версии 1709 или более поздней
  • Пакет SDK для Windows 10 версии 1709 или более поздней версии

Чтобы получить последние средства разработки, см. статью "Загрузки и инструменты" для Windows 10.

Примечание.

Чтобы отправить приложение, использующее необязательные пакеты и /или связанные наборы в Магазин, вам потребуется разрешение. Необязательные пакеты и связанные наборы можно использовать для бизнес-приложений или корпоративных приложений без разрешения Центра партнеров, если они не отправляются в Магазин. Ознакомьтесь со службой поддержки разработчиков Windows, чтобы получить разрешение на отправку приложения, использующего необязательные пакеты и связанные наборы.

Примечание.

Необязательные пакеты, содержащие исполняемый код, должны быть частью связанного набора. Вы не сможете выполнять код из необязательного пакета, если он не является частью связанного набора.

Необязательные пакеты C++ с исполняемым кодом

Сведения о загрузке кода из необязательного пакета C++ см. в репозитории OptionalPackageSample на GitHub. В файле OptionalPackageDLL показано, как создать проект с кодом, который можно выполнить из основного пакета. Проект MyMainApp демонстрирует загрузку кода из файла OptionalPackageDLL.dll.

Необязательные пакеты C# с исполняемым кодом

Чтобы приступить к созданию необязательного пакета кода в C#, выполните следующие действия, чтобы настроить решение:

  1. Создайте новое приложение UWP с минимальной версией, установленной в пакете SDK для Windows 10 Fall Creators Update (сборка 16299) или более поздней версии.

  2. Добавьте в решение новый проект дополнительного пакета кода (универсальная версия Windows ). Убедитесь, что минимальная версия и целевая версия соответствуют версии основного приложения.

  3. Если вы планируете отправить приложения в Магазин, щелкните правой кнопкой мыши оба проекта и выберите Store —> связать приложение с Магазином...

  4. Package.appxmanifest Откройте файл основного приложения и найдите Identity Name значение. Запишите это значение для следующего шага.

  5. Откройте файл необязательного пакета Package.appxmanifest приложения и найдите uap3:MainAppPackageDependency Name значение. uap3:MainAppPackageDependency Name Обновите значение, соответствующее значению Identity Name основного пакета приложения на предыдущем шаге.

    Ниже приведен пример Identity из основного приложения Package.appxmanifest.

    <Identity Name="12345.MainAppProject" Publisher="CN=PublisherName" Version="1.0.0.0" />
    

    Необходимо обновить необязательный пакет uap3:MainPackageDependency приложения, чтобы он соответствовал основному приложению Identity.

    <uap3:MainPackageDependency Name="12345.MainAppProjectTest" />
    
  6. Добавьте файл в Bundle.mapping.txt основное приложение. Выполните действия, описанные в этом разделе "Связанные наборы" , чтобы создать связанный набор, содержащий оба приложения.

  7. Создайте необязательный проект пакета, а затем перейдите в папку "Справочник по пакету" в выходных данных сборки, найденной по адресу ..\[PathToOptionalPackageProject]\bin\[architecture]\[configuration]\Reference. Обратите внимание, что вы можете выбрать любую архитектуру в пути к папке Reference, так как .winmd файл (шаг 8) является независимым от архитектуры.

  8. Добавьте ссылку из основного проекта приложения в файл, найденный .winmd в этой папке. Каждый раз, когда вы изменяете область поверхности API в необязательном проекте пакета, этот .winmd файл должен обновляться. Эта ссылка предоставляет основной проект приложения с необходимыми сведениями для компиляции.

  9. В основном проекте приложения перейдите к свойствам сборки проекта и выберите " Компиляция с помощью цепочки инструментов .NET Native". В настоящее время только отладка в .NET Native поддерживается для необязательного создания пакета кода в C#. Перейдите к свойствам отладки проекта и выберите " Развернуть необязательные пакеты". Это обеспечит синхронизацию обоих пакетов при развертывании основного проекта приложения.

После завершения этих действий можно добавить код в необязательный проект пакета, как если бы он был управляемым проектом компонента WinRT. Чтобы получить доступ к коду в основном проекте приложения, вызовите общедоступные методы, предоставляемые в необязательном проекте пакета.