SQL Server 2022迁移:SSIS自定义组件缺失IDTSComponentMetaData100方法报错
SQL Server 2022下SSIS自定义组件兼容解决方案
错误原因分析
该MissingMethodException是因为SQL Server 2022的SSIS运行时采用了更新版本的组件接口,旧代码依赖的IDTSComponentMetaData100及相关100系列接口的访问逻辑在新版本中已调整,且组件引用的程序集版本不匹配导致。
引用与接口替换方案
1. 替换为SQL Server 2022对应程序集
SQL Server 2022的SSIS托管组件引用程序集默认路径为:C:\Program Files\Microsoft SQL Server\160\DTS\Binn
需引用以下三个程序集:
Microsoft.SqlServer.DTSPipelineWrap.dllMicrosoft.SqlServer.DTSRuntimeWrap.dllMicrosoft.SqlServer.PipelineHost.dll
确保引用的是SQL Server 2022(版本标识160)对应的文件,而非旧版本。
2. 升级接口版本
将代码中的100系列接口替换为SQL Server 2022兼容的160系列接口:
原代码:
IDTSInput100 input = ComponentMetaData.InputCollection.GetObjectByID(inputID); IDTSVirtualInput100 vInput = input.GetVirtualInput(); foreach (IDTSVirtualInputColumn100 vCol in vInput.VirtualInputColumnCollection)
替换为:
IDTSInput160 input = ComponentMetaData.InputCollection.GetObjectByID(inputID) as IDTSInput160; IDTSVirtualInput160 vInput = input.GetVirtualInput() as IDTSVirtualInput160; foreach (IDTSVirtualInputColumn160 vCol in vInput.VirtualInputColumnCollection)
同时需确保ComponentMetaData的类型使用IDTSComponentMetaData160,若继承PipelineComponent,新版本中该属性返回高版本接口,需显式转换或调整类型声明。
3. 项目配置调整
- 在项目引用属性中,将上述SSIS程序集的
Copy Local设置为False,避免部署时携带旧版本文件。 - 确保项目目标框架与SQL Server 2022兼容,推荐使用.NET Framework 4.7.2及以上版本。
注意事项
- 禁止混合引用不同SQL Server版本的SSIS程序集,开发环境建议仅保留SQL Server 2022的引用路径,避免版本冲突。
- 测试需在安装SQL Server 2022的环境中进行,确保组件加载正确版本的运行时。
内容的提问来源于stack exchange,提问作者Nikki
相关产品推荐
相关产品推荐

