MSBuild SqlPublishTask没有运行预部署脚本?

时间:2015-11-27 16:26:17

标签: msbuild visual-studio-2015

我在Visual Studio 2015中有SQL Server Database Project。CI / CD工具正在使用此项目使用带有msbuild的{​​{1}}和关联的发布来发布到目标数据库轮廓。

SqlPublishTask命令类似于:

msbuild

已成功发布任何与架构相关的更改。

但是,不会运行预构建的sql脚本。我可以看到这一点,因为预构建脚本应该删除的旧数据不是。我也分别测试了预构建脚本,它工作正常。

我已经检查过,预构建脚本的"C:\Program Files (x86)\MSBuild\14.0\Bin\msbuild.exe" "c:\pathto\MySqlProj\MySql.sqlproj" /t:Publish /p:SqlPublishProfilePath="c:\pathto\MySqlProj\MyProfile.publish.xml" /p:UpdateDatabase=True /p:PublishScriptFileName="MySqlProj.ssdt-artefact.sql" /m /nr:false Build Action。预构建脚本在项目中的位置是:

PreDeploy

知道预部署脚本没有运行的原因吗?

1 个答案:

答案 0 :(得分:0)

管理解决这个问题。从实验看,即使使用Pre-Deployment Script模板创建预部署脚本,也不会将该文件标记为预部署脚本。

相反,似乎MSBuild在文件的开头寻找特定的注释部分,以确定它是否是预部署脚本:

/*
 Pre-Deployment Script Template                         
--------------------------------------------------------------------------------------
 This file contains SQL statements that will be executed before the build script.   
 Use SQLCMD syntax to include a file in the pre-deployment script.          
 Example:      :r .\myfile.sql                              
 Use SQLCMD syntax to reference a variable in the pre-deployment script.        
 Example:      :setvar TableName MyTable                            
               SELECT * FROM [$(TableName)]                 
--------------------------------------------------------------------------------------
*/

就我而言,这些评论已被删除。将它们添加回来会导致脚本运行。部署后脚本也是如此。