SQL Server数据工具:加载自定义DeploymentPlanModifier时出错:无法加载具有id的必需参与者

Pal*_*881 10 sql-server sql-server-data-tools

我需要拦截SSDT构建来修改构建脚本.我已经按照MSDN部署计划修改器教程,但是当我尝试构建数据库项目时,出现以下错误:

Required contributor with id 'MyDeploymentContributor.SqlRestartableScriptContributor'
could not be loaded.
Run Code Online (Sandbox Code Playgroud)

我使用的是Visual Studio 2012(版本11.0.61219.00 Update 5)和SSDT版本11.1.50730.0.

我签署了程序集,但没有指定密码.

我已经按照我在网上找到的几个解决方案无济于事,包括以下内容:

  1. 更新Visual Studio和SSDT;
  2. 将MyDeploymentContributor.dll和MyDeploymentContributor.pdb复制到以下位置:

    1. C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\Extensions
    2. C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin
    3. C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\120
    4. C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\120\Extensions
  3. 捕获SSDT和DacFx的事件日志(遵循Kevin Cunnane的说明,访问https://social.msdn.microsoft.com/Forums/en-US/5c84ab8e-b50b-4ecd-86da-866ac3bb2248/known-issue-with-ssdt-可扩展性 - 当前 - 释放?论坛= ssdt).以下是DacFx日志的结果:

    • 核心服务:SafeDirectoryCatalog:已C:\Program Files (x86)\Microsoft Visual Stusio 11.0\Common7\IDE\Extensions\Micrsoft\SQLDB\DAC\120\Extensions\MyDeploymentContributor.dll 添加程序集
    • 核心服务:扩展查找:C:\Program Files (x86)\Microsoft Visual Stusio 11.0\Common7\IDE\Extensions\Micrsoft\SQLDB\DAC\120\Extensions添加到扩展查找路径的目录
    • 核心服务:FilteringCompositionContainer:查找导出 Microsoft.SqlServer.Dac.Deployment.DeploymentPlanExecutor
    • 核心服务:FilteringCompositionContainer:将部件创建策略更改为NonShared
    • 核心服务:FilteringCompositionContainer:查找导出 Microsoft.SqlServer.Dac.Deployment.DeploymentPlanModifier

没有ContributorLoader消息.从该日志中,贡献者似乎正确加载.SSDT日志不包含任何提及贡献者的事件.

没有必需的贡献者参数,因此DeploymentContributor我的.sqlproj文件中的节点如下所示:

<PropertyGroup>
    <DeploymentContributors>
        $(DeploymentContributors); MyDeploymentContributor.SqlRestartableScriptContributor
    </DeploymentContributors>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏.谢谢!

小智 5

感谢 Ed Elliot ( https://the.agilesql.club/Blogs/Ed-Elliott/About ),我能够解决我的案例中的这个问题。

我听从了埃德的建议,结果很有效。我创建了一个类似的文件夹C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\120\Extensions\[YourContributorName]\,并将所有内容(包括 DLL)复制到C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\120那里。

在贡献者项目中,我引用了里面的DLLC:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\120\Extensions\[YourContributorName]\

项目成功构建后,我将贡献者 .dll 和 .pdb 文件复制到以下位置:

C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\120\Extensions\[YourContributorName]\

之前,我引用了C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin.

希望这会对某人有所帮助。