SSDT 2017部署自定义组件错误:无法添加到数据流任务

时间:2018-12-28 06:06:38

标签: ssis

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


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


其他信息:

  

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


找不到方法:

  

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


这是我用来部署Assembly的脚本:

"%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)的路径,有人可以解释这两个吗? / p>

我还尝试将值更改为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);
    }

1 个答案:

答案 0 :(得分:0)

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