首页 > 解决方案 > SSDT 2017 部署自定义组件错误:无法添加到数据流任务

问题描述

我正在尝试在 SSIS 中开发自定义组件(SSDT 2017,在 Microsoft 70-463 培训工具包第 19 章第 3 课中进行练习)并将组件拖动到数据流任务时出现错误:


无法将组件添加到数据流任务。无法初始化组件。ProvideComponentProperties 方法中存在潜在问题。


附加信息:

数据流任务 [Calculate Checksum [80]] 出错:System.MissingMethodException:找不到方法:'Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSComponentMetaData100 Microsoft.SqlServer.Dts.Pipeline.PipelineComponent.get_ComponentMetaData()'。在 Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostProvideComponentProperties
(IDTSManagedComponentWrapper100 包装器)的 Microsoft.TK463.CalculateCheckSum.ProvideComponentProperties()


找不到方法:

'Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSComponentMetaData100 Microsoft.SqlServer.Dts.Pipeline.PipelineComponent.get_ComponentMetaData()'。(Microsoft.SqlServer.DTSPipelineWrap)


这是我用来部署程序集的脚本:

"%ProgramFiles(x86)%\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools\gacutil" /u TK463.CalculateCheckSum

copy "C:\TK463\Chp19\TK463Chp19\TK463.CalculateCheckSum\bin\Release\TK463.CalculateCheckSum.dll" "%ProgramFiles(x86)%\Microsoft SQL erver\140\DTS\PipelineComponents"

"%ProgramFiles(x86)%\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools\gacutil" /i "%ProgramFiles(x86)%\Microsoft SQL Server\140\DTS\PipelineComponents\TK463.CalculateCheckSum.dll"

我不确定我使用的 gacutil(v10.0A\bin\NETFX 4.6.2 Tools) 的版本以及我将 DLL 复制到 (140\DTS\PipelineComponents) 的路径,有人可以解释一下这两个吗?

我也尝试将值更改为 False,但仍然出现错误。

<Reference Include="Microsoft.SqlServer.DTSPipelineWrap, Version=13.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
  <EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
<Reference Include="Microsoft.SQLServer.DTSRuntimeWrap, Version=13.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=x86">
  <EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>

构建平台(x86、x64 或 msil)有什么可做的吗?挣扎了几个小时后放弃了,真的需要帮助。多谢。

PS:这里是ProvideComponentProperties()

public override void ProvideComponentProperties()
    {
        base.ProvideComponentProperties();

        // Create component properties.
        this.CreateCustomProperties();

        // Create Synchronous Output
        IDTSOutput100 output = ComponentMetaData.OutputCollection[0];
        output.SynchronousInputID = ComponentMetaData.InputCollection[0].ID;

        // Create built-in output columns.
        this.CreateOutputColumns(ref output);
    }

标签: ssis

解决方案


再次碰到这个问题后 - 我找到了解决方案。
自定义组件需要对以下 DLLS 的引用 - Microsoft.SQLServer.DTSPipelineWrap、Microsoft.SqlServer.DTSRuntimeWrap、Microsoft.SqlServer.ManagedDTS、Microsoft.SQLServer.PipelineHost
所有这些 DLL 引用都必须使用Embed Interop Types = False进行配置。默认情况下,VS 添加其中一些属性设置为True,这是错误的原因。


推荐阅读