ssis - 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);
}
解决方案
再次碰到这个问题后 - 我找到了解决方案。
自定义组件需要对以下 DLLS 的引用 - Microsoft.SQLServer.DTSPipelineWrap、Microsoft.SqlServer.DTSRuntimeWrap、Microsoft.SqlServer.ManagedDTS、Microsoft.SQLServer.PipelineHost。
所有这些 DLL 引用都必须使用Embed Interop Types = False进行配置。默认情况下,VS 添加其中一些属性设置为True,这是错误的原因。
推荐阅读
- python - Python 深入遍历数组。树
- java - 将 xyz 投影到 xy 屏幕坐标的函数
- c# - C# WPF - 数据绑定 DataGridComboboxColumn SelectedValueBinding
- python - Pandas:如何创建一个每 n 行增加的简单计数器?
- ios - iOS - 设计具有透明背景的自定义 UITextField 的最佳方法
- nativescript - NS 应用程序在卸载和安装时不会重置设置 (Android)
- vue.js - Vue Route Params
- excel - 将工作表复制到新工作表
- c# - 将 Button/PictureBox 动态插入到 PictureBox 中
- azure - Azure Active Directory - 更新用户 - 目标实体集当前不支持该请求