如何在SSIS包中使用COM引用?

时间:2012-10-29 18:28:38

标签: com ssis gac

我试图在SSIS脚本任务中使用Microsoft Shell Controls And Automation COM对象库( C:\ Windows \ System32 \ shell32.dll )来操作.zip档案

不幸的是,虽然我已经成功添加了相关的参考,但脚本任务编译好了。我使用VB.NET,因为它值得。一旦我尝试创建库中定义的任何对象,我就会收到以下运行时错误:

  

错误:归档文件中的0x1:System.Reflection.TargetInvocationException:调用目标已抛出异常。 ---> System.IO.FileNotFoundException:无法加载文件或程序集' Interop.Shell32,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'或其中一个依赖项。该系统找不到指定的文件。   文件名:' Interop.Shell32,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'      在ST_a2650b7f39504eaa8c80e37a6736d957.vbproj.ScriptMain.Main()

我认为Interop DLL将全部由我照顾 - 有谁知道我错过了哪一步?

1 个答案:

答案 0 :(得分:3)

SSIS需要所有.dll引用都在GAC注册,你是对的。

您有关于将此dll安装到GAC中的不同选项:

  1. 将.dll拖放到%windir%\ assembly \ 文件夹中。

  2. 使用您正在考虑使用的 gacutil.exe :关于使用gacutil安装到GAC,这里有很多有用的信息:Global_Assembly_Cache。基本上,如果您安装了.NET框架(您使用的是VB.NET,那么没有问题),您的Microsoft.NET文件夹中将有一个gacutil.exe。

  3. (所有其他方法都失败时通常使用的内容)在Visual Studio中创建一个Windows MSI项目,自动为您完成所有这些工作,这里的有用信息How to install assembly in the GAC using MSI

  4. 如果你在GAC中安装.dll并且你仍然遇到问题,另一种选择是实际创建一个单独的visual studio项目,其中包含用于操作所需zip文件的逻辑构建它并使用SSIS从SSIS调用它的exe。 执行流程任务。您可以传递SSIS包中指定的参数。不是很优雅,但是如果你热衷于使用SSIS,那就完成了工作。


    更新

    这个问题的解决方案实现了技巧SSIS Script Task COMException / FileNotFoundException error。问题在于添加了dll的签名引用,这个答案为在SSIS脚本任务中添加COM引用提供了一个很好的逐步解决方法。