有条件地在SSDT SQLPROJ中构建Post-Deploy

时间:2014-07-01 18:20:22

标签: msbuild msbuild-task sql-server-data-tools sqlproj

我想在我的SSDT项目中有条件地构建部署后脚本,但我不明白如何做到这一点。所以通常构建后部署脚本,但是我想要一种在进行Debug构建时不构建或运行部署后脚本的方法。我从命令行运行构建,所以我可以传入属性,但我怎么能使用属性不运行部署后脚本?

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

我想条件构建的文件位于:

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

My Debug构建块如下所示:

  <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>  

我的命令行看起来像这样:

msbuild $sqlprojFilePath /p:Configuration="Debug"

2 个答案:

答案 0 :(得分:3)

在.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>

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

<PropertyGroup Condition="'$(SkipDeployment)'=='true'">
  <DeployDependsOn />
  <SqlDeployDependsOn />
</PropertyGroup>

命令行:

msbuild.exe mydb.sqlproj /p:SkipDeployment=true

大编辑:

或者你可以这样做:

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

并将其更改为如下所示:

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

答案 1 :(得分:1)

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

http://schottsql.blogspot.com/2013/05/trick-to-not-run-prepost-sql-on-publish.html

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