如何在 dacpac 中打包部署贡献者?
How to package a deployment contributor in a dacpac?
我找不到任何关于如何在 dacpac 中打包部署贡献者的参考资料。
- 我们正在使用 DacServices.Deploy Method 将我们的数据库作为 dacpacs 部署到 SQL 服务器。
- 该方法的参数有一个 属性 DacDeployOptions.AdditionalDeploymentContributors,其描述为 "Specifies additional deployment contributors which should run - in addition to those specified in the dacpac [emphasis added]."
所以我的问题是如何在 dacpac 中指定这些部署贡献者?
我尝试将部署贡献者 class 放入 Visual Studio 的 SSDT 项目中,但这会干扰加载到 SQL 服务器中的 CLR 程序集(即,它被加载到 SQL 服务器,如果它的依赖项也没有设置为加载,则会抛出错误。
请指教。谢谢。
要将特定贡献者加载到 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 查找部署贡献者的路径是 hard-coded 到:
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), @"Microsoft SQL Server0\DAC\bin\Extensions")
所以在我的系统上它是 "c:\program files(x86)\Microsoft SQL Server0\DAC\bin\Extensions"。
在您编译 dacpac 时将使用的机器上,您需要它位于 link:
中的 visual studio 路径中
http://agilesqlclub.codeplex.com/wikipage?title=Deploying&referringTitle=Documentation
参见 "If you publish in SSDT" 部分:
(在我的 vs 2015 系统上是 C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC0\Extensions)
另一件事是,当您将您的贡献者复制到扩展目录时,您可以将它们放在另一个文件夹中,这样您就可以保留您的扩展和任何与任何其他贡献者分开的依赖项,这些贡献者将拥有自己的一组依赖项(dll 地狱死于 .net 哈哈)
出于兴趣,您的贡献者做什么?
如果是OSS请考虑分享:
https://github.com/DacFxDeploymentContributors/Contributors
埃德
我找不到任何关于如何在 dacpac 中打包部署贡献者的参考资料。
- 我们正在使用 DacServices.Deploy Method 将我们的数据库作为 dacpacs 部署到 SQL 服务器。
- 该方法的参数有一个 属性 DacDeployOptions.AdditionalDeploymentContributors,其描述为 "Specifies additional deployment contributors which should run - in addition to those specified in the dacpac [emphasis added]."
所以我的问题是如何在 dacpac 中指定这些部署贡献者?
我尝试将部署贡献者 class 放入 Visual Studio 的 SSDT 项目中,但这会干扰加载到 SQL 服务器中的 CLR 程序集(即,它被加载到 SQL 服务器,如果它的依赖项也没有设置为加载,则会抛出错误。
请指教。谢谢。
要将特定贡献者加载到 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 查找部署贡献者的路径是 hard-coded 到:
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), @"Microsoft SQL Server0\DAC\bin\Extensions")
所以在我的系统上它是 "c:\program files(x86)\Microsoft SQL Server0\DAC\bin\Extensions"。
在您编译 dacpac 时将使用的机器上,您需要它位于 link:
中的 visual studio 路径中http://agilesqlclub.codeplex.com/wikipage?title=Deploying&referringTitle=Documentation
参见 "If you publish in SSDT" 部分:
(在我的 vs 2015 系统上是 C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC0\Extensions)
另一件事是,当您将您的贡献者复制到扩展目录时,您可以将它们放在另一个文件夹中,这样您就可以保留您的扩展和任何与任何其他贡献者分开的依赖项,这些贡献者将拥有自己的一组依赖项(dll 地狱死于 .net 哈哈)
出于兴趣,您的贡献者做什么?
如果是OSS请考虑分享:
https://github.com/DacFxDeploymentContributors/Contributors
埃德