仅在调试模式下在发布中包含 PostDeployment sql 脚本

问题描述

我有 Script.PostDeployment.sql 的 .dacpac 项目:

:r .\SiteType.sql
:r .\Enums.sql
:r .\DebugData.sql

我想有条件地包含 DebugData.sql,仅当我使用在 Visual Studio 中选择的 DEBUG 配置文件发布时,因此在发布用于生产时不会包含此数据。

有什么办法可以实现吗?

解决方法

您可以编辑用于创建 dacpac 的 MSBuild 使用的 .sqlproj 文件。

您可以配置 .sqlproj,以便根据您使用的构建配置来包含或不包含某些脚本。

步骤:

  1. 创建项目并添加部署后脚本

  2. 编辑 .sqlproj 文件

  3. 更改包含 PostDeploy 脚本的 ItemGroup:

    <ItemGroup Condition=" '$(Configuration)' == 'Debug' "> <PostDeploy Include="PostDeployment.sql" /> </ItemGroup>

  4. 在调试配置中构建。解压dacpac,你会发现PostDeployment.sql

  5. 内置发布配置。解压 dacpac,你将找不到 PostDeployment.sql。

,

一种选择是每次在运行时运行脚本,但根据服务器名称跳过其执行。如果有严格的环境命名约定,这将起作用。

在DebugData.sql里面放守卫

-- here the condition is LIKE `DEV`,it could be NOT LIKE 'PROD'
IF @@SERVERNAME LIKE 'DEV%' 
BEGIN
    ... Here goes content of the script
END

选项二:

不要使用单个硬编码值,而是为每个配置准备版本:

:r .\DebugData.sql
=>
:r ."\"$(Config)Data.sql

现在你需要两个文件:

DebugData.sql    -- actual script
ReleasaeData.sql -- empty file

根据配置配置文件,将选择其中一个文件。对于release,它是空的,所以不会执行实际的代码。