我在Visual Studio中使用数据库项目。
在我的场景中,我的客户可以直观地自定义我为他们提供的数据库。
例如,客户收缩第三方为他们创建自定义系统,然后第三方在我的数据库中创建一些表。
我知道我永远不应该允许第三方访问我的数据库,但我正在工作的公司允许这样做。
在部署.dacpac时,如何排除不属于我的架构的这些对象?我想这可能是不可能的,在这种情况下我该怎么办?
答案 0 :(得分:5)
这是可能的,而且通常非常有用。目标中可能存在您不想丢弃的对象。我们总是使用单独的drop-script以受控方式(不是自动)将对象放入生产dbs中。
有一个msbuild参数不会删除在目标中找到但在源中没有的对象。 只需使用参数“将对象放在目标中但不在项目中”将其设置为false。此设置将保持这些对象不变。从VS中发布时,该选项也存在。
DropObjectsNotInSource = FALSE
答案 1 :(得分:4)
你很幸运,因为我刚刚发布了一个可以完全符合你想要的部署过滤器!
https://github.com/GoEddie/DeploymentContributorFilterer
这样做会让你忽略或者如果你想部署更新,就不要丢弃它们。
如果您使用sqlpackage.exe部署dacpac,请添加以下命令行:
/p:AdditionalDeploymentContributors=AgileSqlClub.DeploymentFilterContributor
/p:AdditionalDeploymentContributorArguments="SqlPackageFilter=IgnoreName(.*RegexThatMatchesYourObjectsOrUseASchemaMatchAndPutThemInTheirOwnSchema.*)"
如果您在SSDT中使用发布选项(在visual studio中),则将它们添加到发布profile.xml
从技术上讲,这样做是在运行部署时,为每个操作调用过滤器(创建,删除,更改),如果我们匹配正则表达式,我们只需将其从脚本中删除,以便在这种情况下丢弃从未真正执行过。