我找不到有关如何在 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/