SSIS脚本组件无法加载程序集直到手动打开

时间:2017-07-21 13:45:22

标签: c# sql-server visual-studio ssis biml

我正在通过Biml创建一个SSIS项目(使用当前版本的BimlExpress,Varigence BimlExpress page),它使用数据流任务中的脚本组件。创建项目时没有问题,但是当它到达脚本组件时出现错误:

  

无法加载文件或程序集“Microsoft.SqlServer.DTSPipelineWrap,Version = 14.100.0.0,Culture = neutral,PublicKeyToken = 89845dcd8080cc91”或其中一个依赖项。系统找不到指定的文件。

     

在ScriptMain.PreExecute()      在Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.PreExecute()

我可以在GAC中看到这个dll,当我尝试手动添加引用时,SSIS声明我无法添加它,因为它已经包含在项目中。

但是,如果我打开脚本组件并手动Build它 - 但不做其他任何改动 - 数据流任务将毫无问题地运行。

为了澄清,我知道我没有改变任何其他因为我每次想要测试新方法时都会从Biml重新创建这个项目,这提供了一致的基线。

有没有人知道为什么包含对GAC dll的引用的脚本组件只能在手动Built时才能使用,而不能预先使用?

我之前使用过这个确切的Biml没有问题,尽管在不同的环境中。使用Visual Studio 2012对抗SQL Server 2016实例但在Visual Studio 2015(针对2012)中不针对SQL Server 2016实例。

对于进一步的上下文,我还测试了这个输出针对SQL Server 2012,2014和2016的SSIS项目,并使用完全相同的错误消息。

更新

这似乎肯定是项目中的dll版本问题,作为BimlExpress的输出,因为如果我在v4.0_14.100.0.0__89845dcd8080cc91内部手动创建版本为13 dll的C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.SqlServer.DTSPipelineWrap文件夹,则脚本组件现在出错以下内容:

  

System.InvalidCastException:无法将类型为“System .__ ComObject”的COM对象强制转换为接口类型“Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSComponentMetaData100”。此操作失败,因为由于以下错误,IID'{ ID已删除以及}'的接口的COM组件上的QueryInterface调用因以下错误而失败:不支持此类接口(HRESULT异常:0x80004002( E_NOINTERFACE))。

     

at Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.HandleUserException(Exception e)

     

at Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.PreExecute()

     

at Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostPreExecute(IDTSManagedComponentWrapper100 wrapper)

1 个答案:

答案 0 :(得分:-1)

我猜您的问题可能与Express版本有关。

在相关页面上查看Express和BimlStudio版本之间的差异(“与BimlStudio比较”按钮下的功能比较表):

https://www.varigence.com/BimlExpress