我找不到有关如何在dacpac中打包部署贡献者的任何引用。
所以我的问题是,如何在dacpac中指定这些部署贡献者?
我尝试将部署贡献者类放入Visual Studio的SSDT项目中,但是这会干扰加载到SQL Server的CLR程序集(即,它已加载到SQL Server中,并且如果还没有将其依赖项设置为加载,则错误是抛出)。
请指教。谢谢。
最佳答案
要将特定的贡献者加载到dacpac中,则需要手动编辑.sqlproj文件并添加以下内容:
<PropertyGroup>
<DeploymentContributors>$(DeploymentContributors);AgileSqlClub.DeploymentPlanLogger</DeploymentContributors>
</PropertyGroup>
后
<Import Condition="'$(SQLDBExtensionsRefPath)' != ''" Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
将
"AgileSqlClub.DeploymentPlanLogger"
更改为您的贡献者将其名称导出为的任何名称(即[ExportDeploymentPlanModifier("AgileSqlClub.DeploymentPlanLogger", "0.1.0.0")]
)添加此xml将导致dacpac中的“Origin.xml”具有以下内容:
<RequiredContributors>
<DeploymentContributor Name="AgileSqlClub.DeploymentPlanLogger" Version="0.1.0.0" />
</RequiredContributors>
您可能是唯一使用过此功能的人之一,所以谁知道它是否有效?让大家知道!
您还需要将贡献者部署到要在其上构建dacpac的计算机上,以及您要部署或从中生成部署脚本的计算机上。在计算机上,您将从以下位置进行部署:
dacfx用来查找部署贡献者的路径被硬编码为:
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), @"Microsoft SQL Server\120\DAC\bin\Extensions")
因此,在我的系统上,它是“c:\program files(x86)\Microsoft SQL Server\120\DAC\bin\Extensions”。
在编译dacpac的计算机上,需要在链接中的visual studio路径中使用它:
http://agilesqlclub.codeplex.com/wikipage?title=Deploying&referringTitle=Documentation
请参阅“如果您在SSDT中发布”部分:
(在使用vs 2015的系统上,它是C:\Program Files(x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\120\Extensions)
另一件事是,当您将贡献者复制到扩展目录时,可以将其放置在另一个文件夹中,这样就可以保留扩展以及与任何其他贡献者不同的依赖关系,这些贡献者将拥有自己的依赖关系集(并且dll死了与.net大声笑)
出于兴趣,您的贡献者会做什么?
如果是OSS,请考虑共享它:
https://github.com/DacFxDeploymentContributors/Contributors
埃德
关于sql-server - 如何在dacpac中打包部署贡献者?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34500500/