1

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

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

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

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

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

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

2 回答 2

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>

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

<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>  
于 2014-07-01T20:39:33.393 回答
1

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

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

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

于 2014-07-01T19:21:26.120 回答