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

Msbuild 在SSDT SQLPROJ中有条件地构建部署后,msbuild,msbuild-task,sql-server-data-tools,sqlproj,Msbuild,Msbuild Task,Sql Server Data Tools,Sqlproj,我想在我的SSDT项目中有条件地构建部署后脚本,但我不知道如何做到这一点。因此,通常会生成部署后脚本,但我希望在执行调试生成时不生成或运行部署后脚本。我正在从命令行运行构建,因此可以传入属性,但是如何使用属性不运行部署后脚本呢 我看到的选项是SQLCMD、编辑SQLPROJ文件或传入属性,但我找不到任何关于SQLPROJ文件可用属性和不可用属性的参考 我要有条件生成的文件位于此处: <ItemGroup> <PostDeploy Include="PostDeploym

我想在我的SSDT项目中有条件地构建部署后脚本,但我不知道如何做到这一点。因此,通常会生成部署后脚本,但我希望在执行调试生成时不生成或运行部署后脚本。我正在从命令行运行构建,因此可以传入属性,但是如何使用属性不运行部署后脚本呢

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

我要有条件生成的文件位于此处:

<ItemGroup>
    <PostDeploy Include="PostDeploymentScripts\Script.PostDeployment1.sql" />
</ItemGroup>  

可以使用SQLCMD变量执行此操作。在项目中设置一个变量,并在发布项目时检查该变量的值。我在这里写了这样的博客:


不确定msbuild命令行,因为我通常使用sqlpackage.exe来推送更改。

可以使用SQLCMD变量执行此操作。在项目中设置一个变量,并在发布项目时检查该变量的值。我在这里写了这样的博客:


不确定msbuild命令行,因为我通常使用sqlpackage.exe来推送更改。

在.sqlproj中,在Microsoft.Data.Tools.Schema.SqlTasks.targets上导入后添加此行

在*SqlTasks.targets上导入后,在项目文件中查找此行

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

<PropertyGroup Condition="'$(Configuration)'=='debug'">
  <DeployDependsOn />
  <SqlDeployDependsOn />
</PropertyGroup>
大编辑:

或者你可以拿这个:

<ItemGroup>
    <PostDeploy Include="PostDeploymentScripts\Script.PostDeployment1.sql" />
</ItemGroup>  

并将其改为这样:

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

在.sqlproj中,在导入Microsoft.Data.Tools.Schema.SqlTasks.targets后添加此行

在*SqlTasks.targets上导入后,在项目文件中查找此行

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

<PropertyGroup Condition="'$(Configuration)'=='debug'">
  <DeployDependsOn />
  <SqlDeployDependsOn />
</PropertyGroup>
大编辑:

或者你可以拿这个:

<ItemGroup>
    <PostDeploy Include="PostDeploymentScripts\Script.PostDeployment1.sql" />
</ItemGroup>  

并将其改为这样:

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


优秀的博客文章。这是一个完美的解决方案,只是我不需要构建部署后的应用程序。一旦我进入sqlpackage.exe步骤,就太晚了,因为我已经构建了SSDT项目(创建dacpac)。然而,我在你的博客上发布了一个关于如何设置SQLCMD变量值的方法的问题……稍后我将在那里检查这个问题。我通常只让SSDT构建部署后脚本,就好像它不是我想要的配置一样,根据SQLCMD变量,它不会运行。我也倾向于使用SQLPackage和Publish配置文件来设置这些变量,这比试图为我设置一堆命令行参数甚至构建配置文件要容易得多。非常好的博客文章。这是一个完美的解决方案,只是我不需要构建部署后的应用程序。一旦我进入sqlpackage.exe步骤,就太晚了,因为我已经构建了SSDT项目(创建dacpac)。然而,我在你的博客上发布了一个关于如何设置SQLCMD变量值的方法的问题……稍后我将在那里检查这个问题。我通常只让SSDT构建部署后脚本,就好像它不是我想要的配置一样,根据SQLCMD变量,它不会运行。我还倾向于使用SQLPackage和Publish配置文件来设置这些变量,这比试图为我设置一堆命令行参数甚至构建配置文件要容易得多。太棒了!但是,我找不到有关DeployDependsOn属性的任何信息。你有关于这方面的文档链接吗?我在这里使用了你的第二个想法,它正是我想要的!这些是在Microsoft.Data.Tools.Schema.SqlTasks.targets中定义的属性,MsBuild使用这些属性来计划/排序相关目标。通过将这些值归零,可以跳过部署部分,但更好的是,我们只需通过一个条件省略部署后脚本。太棒了!但是,我找不到有关DeployDependsOn属性的任何信息。你有关于这方面的文档链接吗?我在这里使用了你的第二个想法,它正是我想要的!这些是在Microsoft.Data.Tools.Schema.SqlTasks.targets中定义的属性,MsBuild使用这些属性来计划/排序相关目标。通过将这些值归零,可以跳过部署部分,但更好的是,我们只需通过一个条件省略部署后脚本。
<ItemGroup Condition="'$(Configuration)'=='debug'">
    <PostDeploy Include="PostDeploymentScripts\Script.PostDeployment1.sql" />
</ItemGroup>