解决方案概述

已完成

Microsoft Power Platform 使用 Microsoft Dataverse 的解决方案功能来跟踪和管理应用、流、表,甚至开发人员代码组件(例如 JavaScript) 和插件。解决方案是可将项目资产从一个环境传输到另一个环境的容器。 解决方案是 Microsoft Power Platform 应用程序生命周期管理 (ALM) 策略的核心部分。

解决方案可以是非托管的,也可以是托管的

  • 非托管解决方案 - 用于需对组件进行更改的开发环境。 可以在解决方案内创建新组件,也可以添加 Dataverse 环境中的任何现有组件。 非托管解决方案可以导出为非托管版本或托管版本。 解决方案的已导出、非托管版本应签入源代码管理系统中。 一款名为 SolutionPackager 的工具可用于准备要签入的解决方案。 您可以使用 Microsoft Power Platform Build Tools 自动执行本流程。

  • 托管解决方案 - 用于部署到该解决方案的开发环境之外的任何环境。 不能直接从托管解决方案中修改或删除托管解决方案组件,也不能添加任何新组件。 但是,您可以将组件包含在另一个非托管解决方案中并进行更改。 这将创建对托管解决方案的依赖关系。 托管解决方案可独立于环境中的其他托管解决方案进行维护。 虽然可以手动将非托管解决方案导出为托管版本,但建议通过自动生成流程生成托管解决方案(作为生成工件)。

解决方案可通过 Maker Portal (make.powerapps.com) 创建和管理,也可以由开发人员使用平台 API 创建和管理。 此外,开发人员还可以使用 SolutionPackager、Package Deployer 等工具以及 DevOps 和 GitHub 生成任务和操作,执行与解决方案相关的各种任务并实现自动化。

解决方案可以分层

多个解决方案可以在一个环境中共存。 为了管理这些解决方案,Dataverse 会在各个解决方案组件级别使用层概念来跟踪它们。 所有非托管解决方案都作为单层进行跟踪,而每个托管解决方案会单独跟踪。 当存在多个托管解决方案层时,将使用环境中最后安装的托管解决方案,而不使用之前导入的托管解决方案。 某些组件支持合并,而不是仅使用最新解决方案。 例如,一个 Power Apps 模型驱动应用的窗体可能会被三个托管解决方案修改,每个解决方案都会更改窗体的不同部分。 在此示例中,合并结果将是一个组合窗体,包括所有三个托管解决方案进行的更改。 然而,非托管层始终位于顶部,并且非托管层中的更改将覆盖环境中托管解决方案的任何更改。 最终,用户会看到环境中所有解决方案层的组合。 下图展示了此概念。

显示环境中不同解决方案层的屏幕截图。

分层概念是支持多个解决方案在单一环境中协同工作的关键。 它还有助于从托管解决方案进一步定制组件。

解决方案依赖项

解决方案组件通常会依赖其他解决方案组件。 解决方案运行时会跟踪这些依赖关系,以确保如果解决方案是另一个解决方案的依赖项,则无法被删除。

使用 Power Platform CLI 处理解决方案

除了使用制作者门户,开发人员还可以使用 Power Platform CLI 执行许多解决方案管理任务。

例如,以下代码将使用新的 Dataverse 解决方案项目初始化目录,然后添加对开发人员创建的滑块 PCF 组件的引用。

pac solution init --publisher-name developer --publisher-prefix dev
pac solution add-reference --path c:\Users\Downloads\SliderComponent

解决方案打包

从 Dataverse 环境中导出的解决方案只是包含元数据的压缩 zip 文件。 作为单个二进制文件,它在放入源代码管理存储库时不是非常有效或有用。

为了促进源代码管理,解决方案打包工具可将一个 Dataverse 解决方案解包为一系列 XML 文件和其他文件,使这些文件可由源代码管理系统方便地管理。 解决方案打包工具还可以将提取的组件重新打包为解决方案 zip 文件。

开发人员可以使用以下工具来实现解决方案打包支持:

  • Power Platform CLI
  • 实现自动化的 Power Platform Build Tools
  • SolutionPackager 工具

使用 Power Platform CLI 进行解决方案打包

例如,以下代码将从 Dataverse 中导出解决方案,并使用 SolutionPackager 逻辑解包所有单个文件。

pac solution pack --zipfile C:\MyProject.zip --folder .\MyProjectUnpacked\.
pac solution unpack --zipfile C:\MyProject.zip --folder .\MyProjectUnpacked\.

SolutionPackager 工具

SolutionPackager 工具作为 NuGet 包 Microsoft.CrmSdk.CoreTools 的一部分进行分发。

SolutionPackager 工具是可执行文件,可用于执行以下操作:

  • 提取:将解决方案 .zip 文件提取到文件夹

  • 打包:将文件夹打包为 .zip 文件

它支持各种命令行参数,可用于执行特定操作作为解决方案提取/打包操作的一部分。 有关如何使用 SolutionPackager 工具的深入详细信息,请参阅 SolutionPackager 工具文章。

有时需要管理在不同项目中创建和管理的项,例如 Web 资源或插件程序集。 这需要将解决方案中的文件从提取文件夹中的默认位置映射到相关项目目录中的位置。 例如,插件程序集通常位于插件程序集项目的 bin 输出文件夹中。 要完成本操作,您可以使用 /map 参数来管理这些位置的映射。 有关如何生成 XML 映射文档的详细说明,请参阅使用 /map 命令参数

虽然 SolutionPackager 可以手动独立运行,但更常见的是,它作为自动生成流程的一部分运行。 Microsoft Power Platform Azure DevOps 生成任务和 GitHub Actions 都有使用 SolutionPackager 解包和打包解决方案的步骤。