如何在 dacpac 中打包部署贡献者?

Dav*_*cer 5 sql-server dacpac sql-server-data-tools visual-studio-2015

我找不到有关如何在 dacpac 中打包部署贡献者的任何参考资料。

  1. 我们正在使用DacServices.Deploy 方法将我们的数据库作为 dacpacs 部署到 SQL Server。
  2. 该方法的参数具有属性DacDeployOptions.AdditionalDeploymentContributors,其描述为“指定应运行的其他部署贡献者 -除了 dacpac [强调添加] 中指定的那些。”

所以我的问题是如何在 dacpac 中指定这些部署贡献者?

我尝试将部署贡献者类放在 Visual Studio 的 SSDT 项目中,但这会干扰加载到 SQL Server 中的 CLR 程序集(即,它被加载到 SQL Server 中,如果它的依赖项也未设置为加载,则错误是抛出)。

请指教。谢谢。

Ed *_*ott 1

要将您想要加载的特定贡献者放入 dacpac 中,您需要手动编辑 .sqlproj 文件并添加以下内容:

<PropertyGroup>
    <DeploymentContributors>$(DeploymentContributors);AgileSqlClub.DeploymentPlanLogger</DeploymentContributors>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

后

<Import Condition="'$(SQLDBExtensionsRefPath)' != ''" Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
Run Code Online (Sandbox Code Playgroud)

更改"AgileSqlClub.DeploymentPlanLogger"为您的贡献者导出的名称(即[ExportDeploymentPlanModifier("AgileSqlClub.DeploymentPlanLogger", "0.1.0.0")])

添加此 xml 将导致 dacpac 中的“Origin.xml”具有以下内容:

<RequiredContributors>
  <DeploymentContributor Name="AgileSqlClub.DeploymentPlanLogger" Version="0.1.0.0" />
</RequiredContributors>
Run Code Online (Sandbox Code Playgroud)

您可能是唯一使用过此功能的人之一,所以谁知道它是否有效?让大家知道!

您还需要将贡献者部署到您正在构建 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=部署&referringTitle=文档

请参阅“如果您在 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

埃德