我想在我的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"
答案 0 :(得分:3)
在.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>
这将从依赖关系链中删除部署项目,并可以修改为使用备用属性。
<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推送更改。