Дополнительные пакеты с исполняемым кодомOptional packages with executable code

Необязательные пакеты с исполняемым кодом полезны для разделения большого или сложного приложения или для добавления в уже опубликованное приложение.Optional packages with executable code are useful for dividing a large or complex app, or for adding on to an app that's already been published. С помощью Visual Studio 2017 версии 15.7 и .NET Native 2.1 можно загрузить исполняемый код из дополнительных пакетов C++ и C#.With Visual Studio 2017, version 15.7 and .NET Native 2.1, you can load executable code from both C++ and C# optional packages.

Предварительные требованияPrerequisites

  • Visual Studio 2019 или Visual Studio 2017 (версия 15,7 или более поздняя)Visual Studio 2019 or Visual Studio 2017 (version 15.7 or later)
  • Windows 10 версии 1709 и вышеWindows 10, version 1709 or later
  • Windows 10, пакет SDK для версии 1709 или более позднейWindows 10, version 1709 SDK or later

Чтобы скачать самые последние средства для разработки, см. раздел Загружаемые файлы и инструменты для Windows 10.To get the latest development tools, see Downloads and tools for Windows 10.

Примечание

Чтобы отправить приложение, использующее дополнительные пакеты и (или) связанные наборы, в Store, вам потребуется разрешение.To submit an app that uses optional packages and/or related sets to the Store, you will need permission. Необязательные пакеты и связанные наборы можно использовать для бизнес-приложений или корпоративных приложения без разрешения центра партнеров, если они не отправлены в магазин.Optional packages and related sets can be used for Line of Business (LOB) or enterprise apps without Partner Center permission if they are not submitted to the Store. Для получения разрешения на отправку приложений, использующих дополнительные пакеты и связанные наборы, см. раздел Поддержка разработчиков для Windows.See Windows developer support to get permission to submit an app that uses optional packages and related sets.

Примечание

Необязательные пакеты, содержащие исполняемый код, должны быть частью связанного набора.Optional packages containing executable code must be part of a related set. Вы не сможете выполнить код из необязательного пакета, если он не является частью связанного набора.You will not be able to execute code from an optional package unless it is part of a related set.

Дополнительные пакеты C++ с исполняемым кодомC++ Optional packages with executable code

Для загрузки кода из дополнительного пакета C++ см. репозиторий OptionalPackageSample на GitHub.To load code from a C++ optional package, see the OptionalPackageSample repository on GitHub. OptionalPackageDLL показывает, как создать проект с кодом, который можно исполнить из основного пакета.The OptionalPackageDLL shows how to create a project with code that can be executed from the main package. Проект MyMainApp демонстрирует, как загрузить код из файла OptionalPackageDLL.dll.The MyMainApp project demonstrates how to load code from the OptionalPackageDLL.dll file.

Дополнительные пакеты C# с исполняемым кодомC# Optional packages with executable code

Чтобы приступить к созданию дополнительного пакета с кодом на C#, выполните следующие действия для настройки решения:To get started building an optional code package in C#, follow the below steps to configure your solution:

  1. Создайте новое приложение UWP, задав для него минимальную версию ОС: Windows 10 Fall Creators Update SDK (сборка 16299) или выше.Create a new UWP application with the minimum version set to the Windows 10 Fall Creators Update SDK (Build 16299) or higher.

  2. Добавьте новый проект Дополнительный пакет с кодом (Universal Windows) в решение.Add a new Optional Code Package (Universal Windows) project to the solution. Убедитесь, что Минимальная версия и Целевая версия совпадают с соответствующими версиями основного приложения.Ensure the Minimum Version and Target Version match that of your main app.

  3. Если вы планируете отправить приложения в Store, щелкните правой кнопкой мыши оба проекта и выберите Store -> Связать приложение с Store...If you plan to submit your apps to the Store, right click on both projects and select Store -> Associate App with the Store...

  4. Откройте файл Package.appxmanifest основного приложения и найдите значение Identity Name.Open the Package.appxmanifest file of the main app and find the Identity Name value. Запишите это значение, чтобы применить его в ходе следующего шага.Make a note of this value for the next step.

  5. Откройте дополнительный пакет приложения Package.appxmanifest и найдите значение uap3:MainAppPackageDependency Name.Open the optional app package's Package.appxmanifest file and find the uap3:MainAppPackageDependency Name value. Обновите значение uap3:MainAppPackageDependency Name в соответствии со значением Identity Name пакета основного приложения из предыдущего шага.Update the uap3:MainAppPackageDependency Name value to match the Identity Name value of the main app package from the previous step.

    Вот пример Identityиз Package.appxmanifest основного приложения.Here's an example of the Identity from the main app's Package.appxmanifest.

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

    Значение uap3:MainPackageDependency дополнительного пакета приложения необходимо обновить в соответствии со значением Identity основного приложения.The optional app package's uap3:MainPackageDependency needs to be updated to match the main app's Identity.

    <uap3:MainPackageDependency Name="12345.MainAppProjectTest" />
    
  6. Добавьте файл Bundle.mapping.txt в основное приложение.Add a Bundle.mapping.txt file to the main app. Выполните действия в разделе Связанные наборы, чтобы создать связанный набор, содержащий оба приложения.Follow the steps in this Related sets section to create a related set containing both apps.

  7. Создайте проект дополнительного пакета и перейдите к папке пакета "Справочник" в выходных данных сборки, расположенной в ..\[PathToOptionalPackageProject]\bin\[architecture]\[configuration]\Reference.Build the optional package project and then navigate to the package Reference folder in the output from the build found at ..\[PathToOptionalPackageProject]\bin\[architecture]\[configuration]\Reference. Обратите внимание, что в пути к папке "Справочник" можно выбрать любую архитектуру, так как файл .winmd (шаг 8) не зависит от архитектуры.Note that you can choose any architecture in the path to the Reference folder since the .winmd file (step 8) is architecture independent.

  8. Добавьте ссылку из проекта основного приложения в файл .winmd, расположенный в этой папке.Add a reference from the main app project to the .winmd file found in this folder. При каждом изменении контактной зоны API в проекте дополнительного пакета этот файл .winmdнеобходимо обновлять.Every time you change the API surface area in the optional package project, this .winmd file must be updated. В этом справочнике приводится проект основного приложения с информацией, необходимой для компиляции.This reference provides the main app project with the necessary information to compile.

  9. В проекте основного приложения перейдите к свойствам сборки проекта и выберите Компилировать с помощью цепочки инструментов .NET Native.In the main app project, navigate to the project build properties and select Compile with .NET Native tool chain. В настоящее время для создания дополнительного пакета с кодом на C# поддерживается только отладка в .NET Native.Currently, only debugging in .NET Native is supported for optional code package creation in C#. Перейдите к свойствам отладки проекта и выберите Развернуть дополнительные пакеты.Go to the project debug properties and select Deploy optional packages. Это гарантирует, что оба пакета будут синхронизированы при каждом развертывании проекта основного приложения.This will ensure that both packages are in sync whenever you deploy the main app project.

После выполнения этих действий можно добавить код в необязательный проект пакета, как если бы он был управляемым проектом компонента WinRT.After you're finished with these steps, you can add code to the optional package project as if it were a managed WinRT Component project. Для доступа к коду в проекте основного приложения вызовите открытые методы, предоставляемые в проекте дополнительного пакета.To access the code in the main app project, call the public methods exposed in the optional package project.