在 SSDT SQLPROJ 中有条件地构建部署后

Tyl*_*nes 1 msbuild msbuild-task sqlproj sql-server-data-tools

我想在我的 SSDT 项目中有条件地构建部署后脚本,但我不明白该怎么做。因此,通常会构建部署后脚本,但我想要一种在进行调试构建时不构建或运行部署后脚本的方法。我正在从命令行运行构建,因此我可以传入属性,但是如何使用属性来不运行部署后脚本?

我看到的选项是 SQLCMD,或编辑 SQLPROJ 文件,或传入属性,但我找不到任何关于 SQLPROJ 文件可用属性和不可用属性的参考。

我想要有条件构建的文件位于此处:

<ItemGroup>
    <PostDeploy Include="PostDeploymentScripts\Script.PostDeployment1.sql" />
</ItemGroup>  
Run Code Online (Sandbox Code Playgroud)

我的调试构建块如下所示:

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <OutputPath>bin\Debug\</OutputPath>
    <BuildScriptName>$(MSBuildProjectName).sql</BuildScriptName>
    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <DefineDebug>true</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>  
Run Code Online (Sandbox Code Playgroud)

我的命令行如下所示:

msbuild $sqlprojFilePath /p:Configuration="Debug"
Run Code Online (Sandbox Code Playgroud)

Nic*_*eus 5

在 .sqlproj 中,添加此行以在导入 Microsoft.Data.Tools.Schema.SqlTask​​s.targets 之后发生

导入 *SqlTask​​s.targets 后,在项目文件中找到此行。

<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(MSBuildToolsVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" />

<PropertyGroup Condition="'$(Configuration)'=='debug'">
  <DeployDependsOn />
  <SqlDeployDependsOn />
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

这将从依赖链中删除部署项目,并且可以修改为使用备用属性。

<PropertyGroup Condition="'$(SkipDeployment)'=='true'">
  <DeployDependsOn />
  <SqlDeployDependsOn />
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

命令行:

msbuild.exe mydb.sqlproj /p:SkipDeployment=true
Run Code Online (Sandbox Code Playgroud)

大编辑:

或者你可以采取这个:

<ItemGroup>
    <PostDeploy Include="PostDeploymentScripts\Script.PostDeployment1.sql" />
</ItemGroup>  
Run Code Online (Sandbox Code Playgroud)

并将其更改为如下所示:

<ItemGroup Condition="'$(Configuration)'=='debug'">
    <PostDeploy Include="PostDeploymentScripts\Script.PostDeployment1.sql" />
</ItemGroup>  
Run Code Online (Sandbox Code Playgroud)