通过使用构建和部署贡献者自定义数据库构建和部署

Visual Studio 提供扩展点,可用于修改数据库项目的生成和部署作的行为。

可用的扩展点

可以为可扩展性点创建扩展,如下表所示:

Action 参与者类型 注释
构建 BuildContributor 在完全验证项目模型后生成 SQL 项目时,将执行这种类型的扩展。 除了生成任务的所有属性和任何自定义参数外,生成参与者还可以访问已完成的模型。
Deploy DeploymentPlanModifier 在部署 SQL 项目作为部署管道的一部分时,在生成部署计划之后,但在执行部署计划之前,将执行这种类型的扩展。 可以使用 DeploymentPlanModifier 通过添加或删除步骤来修改部署计划。 部署参与者可以访问部署计划、比较结果以及源和目标模型。
Deploy 部署计划执行器 执行部署计划并提供对部署计划的只读访问权限时,将执行这种类型的扩展。 DeploymentPlanExecutor 根据部署计划执行操作。

支持的扩展性方案

可以实现生成或部署贡献者来启用以下示例场景:

  • 在项目生成期间生成架构文档 - 若要支持此方案,请实现 BuildContributor 并重写 OnExecute 方法以生成架构文档。 可以创建一个目标文件,该文件定义默认参数,用于控制扩展是否运行并指定输出文件的名称。

  • 部署 SQL 项目时生成差异报告 - 若要支持此方案,请实现部署 SQL 项目时生成 XML 文件的 DeploymentPlanExecutor

  • 修改部署计划以在发生数据运动时更改 - 若要支持此方案,请实现 DeploymentPlanModifier 并循环访问部署计划。 对于计划中的每个 SqlTableMigrationStep,您需要检查比较结果,以确定步骤是应执行还是跳过。

  • 部署 SQL 项目时,将文件复制到生成的 dacpac - 若要支持此方案,请实现部署参与者并重写 OnEstablishDeploymentConfiguration 方法,以指定哪些文件被项目系统标记为 DeploymentExtensionConfiguration。 这些文件应复制到输出文件夹,并将其添加到生成的 dacpac 中。 还可以修改参与者,将多个文件合并到一个新文件中,该文件复制到输出文件夹,并将其添加到部署清单。 在部署期间,可以实现 OnApplyDeploymentConfiguration 方法,从 dacpac 中提取这些文件,并准备这些文件以在 OnExecute 方法中使用。

此外,还可以从写入数据库项目文件的贡献者中公开自定义名称/值参数对。 可以使用这些参数使参与者能够从 MSBuild 中提取信息,或使参与者的最终用户能够自定义行为。 例如,可以允许用户指定输入或输出文件的名称。

常见任务

任务 支持内容
详细了解可扩展性点: 您可以阅读用于实现构建和部署贡献者的基类。 BuildContributor

DeploymentContributor
创建示例参与者: 了解创建生成或部署参与者所需的步骤。 如果遵循这些指南,您:

- 创建生成参与者,该生成参与者生成一个报表,该报表列出模型中的所有元素。
- 创建一个部署贡献者,该贡献者在部署计划执行之前更改部署计划。
- 创建部署参与者,用于在部署 SQL 项目时生成部署报表。

可以在单个程序集或多个程序集中创建所有团队成员,这取决于您希望如何将这些成员分配到您的团队中。
演练:扩展数据库项目生成以生成模型统计信息

演练:扩展数据库项目部署以修改部署计划

演练:扩展数据库项目部署以分析部署计划