我在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
知道预部署脚本没有运行的原因吗?
答案 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)]
--------------------------------------------------------------------------------------
*/
就我而言,这些评论已被删除。将它们添加回来会导致脚本运行。部署后脚本也是如此。