我在Visual 2015中有一个SQL Server Database Project。CI/CD工具正在使用这个项目来使用带有msbuild和相关发布配置文件的SqlPublishTask将目标数据库发布到目标数据库。
msbuild命令看起来类似于:
"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 任何与架构相关的更改都会成功发布。
但是,未运行预构建sql脚本。我可以看到这一点,因为应该由预构建脚本删除的旧数据不是。我还分别测试了预构建脚本,它运行良好。
我已经检查过了,预构建脚本有一个Build Action of PreDeploy。项目中预构建脚本的位置是:
c:\pathto\MySqlProj\Scripts\Pre-Deploy\Script.PreDeployment.sql知道为什么预部署脚本没有运行吗?
发布于 2015-12-02 13:59:32
设法解决了这个问题。从实验来看,尽管使用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)]
--------------------------------------------------------------------------------------
*/就我而言,这些评论已被删除。将它们添加回,就会运行脚本。部署后脚本也是如此。
https://stackoverflow.com/questions/33961431
复制相似问题