在自定义SSIS组件中找不到SetDataTypeProperties的方法

我正在尝试构建一个简单的自定义SSIS组件,它查看单个输入列并validation它,根据每行的值创建bool类型的输出列。

我已经成功构建了一个更简单的组件,它接受一个值并对其进行转换:这不需要摆弄输出列。 在这个例子中,我需要接受一个字符串并输出一个布尔值,组件需要知道它输出一个布尔值,所以我可以将值输入条件分割。

我正在努力添加输出列。 基于Microsoft的代码示例 ,我已经这样做了:

public override DTSValidationStatus Validate() { IDTSOutput100 output = ComponentMetaData.OutputCollection[0]; IDTSOutputColumn100 outputcol = output.OutputColumnCollection.New(); outputcol.Name = "IsValid"; outputcol.SetDataTypeProperties(DataType.DT_BOOL, 0, 0, 0, 0); return DTSValidationStatus.VS_ISVALID; } 

然后我尝试在ProcessInput步骤中填充它:

 public override void ProcessInput(int inputID, PipelineBuffer buffer) { while (buffer.NextRow()) { string str = buffer.GetString(0); buffer.SetBoolean(0, IsValid(str)); // validation code not relevant } } 

当我尝试在包中使用此组件时,我收到此错误:

 The component has detected potential metadata corruption during validation. Error at Data Flow Task [Uppercase [24]]: System.MissingMethodException: Method not found: 'Void Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSOutputColumn100.SetDataTypeProperties(Microsoft.SqlServer.Dts.Runtime.Wrapper.DataType, Int32, Int32, Int32, Int32)'. at EmailValidation.Uppercase.Validate() at Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostValidate(IDTSManagedComponentWrapper100 wrapper) 

搜索此错误消息并没有产生任何价值。

在原始示例中 – 以及其他一些在线教程 – 通过循环输入列并为每个输入列添加额外输出来完成添加输出列。 我试过这个并得到同样的错误。

我还尝试将输出列代码从Validate移动到OnInputPathAttached ,这仍然会产生相同的错误。

我究竟做错了什么?

在调查中,这似乎是Visual Studio 2015的SQL Server数据工具中的一个错误。我在Visual Studio 2013中的Integration Services包中构建,部署和使用了具有自定义输出列的自定义组件。但是,同一工具部署在2015年的包导致了所描述的错误。

如果它仍然相关,我遇到了类似的问题(使用ComponentMetaData属性而不是SetDataTypeProperties ),并且适用于我的解决方案是将Microsoft.SqlServer.DTSPipelineWrapMicrosoft.SQLServer.DTSRuntimeWrap引用的Embed Interop Types属性设置为false

我在这里找到了解决方案。 它被列为获取InvalidCastException的解决方案,但它似乎与您在自定义组件中引用DTSPipelineWrapDTSRuntimeWrap程序集时相关。