我正在尝试在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);
}
答案 0 :(得分:0)
再次遇到这个问题后-我找到了解决方案。
自定义组件需要引用以下DLLS- Microsoft.SQLServer.DTSPipelineWrap,Microsoft.SqlServer.DTSRuntimeWrap,Microsoft.SqlServer.ManagedDTS,Microsoft.SQLServer.PipelineHost 。
所有这些DLL引用都必须配置为 Embed Interop Types = False 。默认情况下,VS会添加一些属性设置为 True 的属性,这是导致错误的原因。