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

标签 sql-server visual-studio-2015 sql-server-data-tools dacpac

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

  • 我们正在使用 DacServices.Deploy Method将我们的数据库作为 dacpacs 部署到 SQL Server。
  • 该方法的参数具有属性 DacDeployOptions.AdditionalDeploymentContributors其中有描述“指定应该运行的其他部署贡献者 - 除了 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 hell 死了)与.net 哈哈)

    出于兴趣,您的贡献者做什么?

    如果是OSS请考虑分享:

    https://github.com/DacFxDeploymentContributors/Contributors

    埃德

    关于sql-server - 如何在 dacpac 中打包部署贡献者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34500500/

    相关文章:

    c# - SSDT 部署后脚本 - 运行文件夹中的所有脚本

    sql - 备份特定架构的最佳方法?

    mysql - 返回计算值中的两个最高值

    android - 无法在适用于 Android 的 Visual Studio 2015 模拟器中运行 App

    visual-studio-2012 - 默认为 Visual Studio 2012 数据库项目中的 T-SQL Pane View

    sql-server - 如何使用 dacpac 和 SqlPackage.exe 部署时态表

    sql - TSQL - 递归 CTE 效率低下 - 需要替代方案

    sql-server - 从存储过程中调用存储过程并返回记录集

    c++ - 可视化应用程序表单设计器

    c# - 在 Visual Studio 2015 中构建 VSIX 项目时出现错误 CS1759