我找不到有关如何在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死了与.net大声笑)

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

    如果是OSS,请考虑共享它:

    https://github.com/DacFxDeploymentContributors/Contributors

    埃德

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

    10-11 03:00