包含可执行代码的可选包

包含可执行代码的可选包对于拆分大型或复杂的应用,或者向已发布的应用添加新组件很有用。 使用 Visual Studio 2017 版本 15.7 和 .NET Native 2.1,你可以从 C++ 和 C# 可选程序包加载可执行代码。

先决条件

  • Visual Studio 2019 或 Visual Studio 2017(版本 15.7 或更高版本)
  • Windows 10 版本 1709 或更高版本
  • Windows 10 SDK 版本 1709 或更高版本

若要获取最新的开发工具,请参阅适用于 Windows 10 的下载和工具。

注意

要将使用可选包和/或相关集的应用提交到 Store,您需要拥有权限。 如果未提交到 Store,则可选包和相关集可用于无需合作伙伴中心权限的业务线 (LOB) 或企业应用。 请参阅 Windows 开发人员支持,以获取权限提交使用可选包或相关集的应用。

注意

包含可执行代码的可选包必须是相关集的一部分。 除非是相关集的一部分,否则无法从可选包执行代码。

包含可执行代码的 C++ 可选包

若要从 C++ 可选包加载代码,请参阅 GitHub 上的 OptionalPackageSample 存储库。 OptionalPackageDLL 演示如何使用可从主包执行的代码來创建项目。 MyMainApp 项目演示如何从 OptionalPackageDLL.dll 文件加载代码

包含可执行代码的 C# 可选包

要开始在 C# 中生成可选代码包,请执行以下步骤来配置解决方案:

  1. 创建新的 UWP 应用程序,并将最低版本设置为 Windows 10 Fall Creators Update SDK(内部版本 16299)或更高版本。

  2. 向解决方案添加新的可选代码包(通用 Windows)项目。 确保最低版本目标版本与主应用的版本匹配。

  3. 如果计划将应用提交到应用 Store,请右键单击这两个项目并选择 Store -> 将应用与 Store 相关联...

  4. 打开主应用的 Package.appxmanifest 文件并查找 Identity Name 值。 记下该值以供下一步使用。

  5. 打开可选应用包的 Package.appxmanifest 文件并查找 uap3:MainAppPackageDependency Name 值。 更新 uap3:MainAppPackageDependency Name 值以匹配上一步主应用包的 Identity Name 值。

    下面是主应用 Package.appxmanifestIdentity 示例。

    <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”(引用)文件夹。 请注意,可以从“Reference”(引用)文件夹的路径中选择任何体系结构,因为 .winmd 文件(步骤 8)独立于体系结构。

  8. 将主应用项目中的引用添加到此文件夹中的 .winmd 文件。 每次更改可选包项目中的 API 外围应用时,都必须更新.winmd 文件。 此引用提供了必要信息待编译的主应用项目。

  9. 在主应用项目中,导航到项目版本属性,然后选择使用 .NET Native 工具链进行编译。 目前,在 C# 中创建可选代码包仅支持在 .NET Native 中进行调试。 转到项目调试属性并选择“部署可选包”。 这将确保两个包在部署主应用项目时能处于同步状态。

完成这些步骤后,您可以将代码添加到可选包项目中,就像它是托管的 WinRT 组件项目一样。 要访问主应用项目中的代码,请调用可选包项目中公开的公共方法。