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

iam*_*ave 14 c# sql-server ssis visual-studio biml

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

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

在Script.Sain.PreExecute()at 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__89845dcd8080cc91C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.SqlServer.DTSPipelineWrap脚本组件中手动创建带有版本13 dll 的文件夹,现在错误输出如下:

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

在Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.HandleUserException(例外e)

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

在Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostPreExecute(IDTSManagedComponentWrapper100包装器)

Dav*_* BS 1

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

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

https://www.varigence.com/BimlExpress

  • @davidbs“来自外部应用程序的 API 访问”指的是这样一个事实:使用 Express,您无法通过您构建的程序或命令行引用 BimlC 并发出包。它不是指通过脚本任务引用程序集。 (4认同)