Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SSIS包中使用COM引用?_Com_Ssis_Gac - Fatal编程技术网

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

如何在SSIS包中使用COM引用?,com,ssis,gac,Com,Ssis,Gac,我试图从SSIS脚本任务中使用MicrosoftShell控件和自动化COM对象库(C:\Windows\System32\shell32.dll)来操作.zip存档 不幸的是,虽然我已经成功地添加了相关的引用,并且脚本任务编译正常。我正在使用VB.NET,这是值得的。在尝试创建库中定义的任何对象时,我会出现以下运行时错误: 错误:存档文件处的0x1:System.Reflection.TargetInvocationException:调用的目标已引发异常。-->System.IO.FileN

我试图从SSIS脚本任务中使用
MicrosoftShell控件和自动化
COM对象库(C:\Windows\System32\shell32.dll)来操作.zip存档

不幸的是,虽然我已经成功地添加了相关的引用,并且脚本任务编译正常。我正在使用VB.NET,这是值得的。在尝试创建库中定义的任何对象时,我会出现以下运行时错误:

错误:存档文件处的0x1:System.Reflection.TargetInvocationException:调用的目标已引发异常。-->System.IO.FileNotFoundException:无法加载文件或程序集“Interop.Shell32,版本=1.0.0.0,区域性=中性,PublicKeyToken=null”或其依赖项之一。系统找不到指定的文件。 文件名:“Interop.Shell32,版本=1.0.0.0,区域性=中性,PublicKeyToken=null” 在ST_a2650b7f39504eaa8c80e37a6736d957.vbproj.ScriptMain.Main()上


我以为Interop DLL会为我处理好的-有人知道我缺少了什么步骤吗?

SSIS需要所有.DLL引用才能向GAC注册,你是对的

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

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

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

  • (当所有其他操作都失败时我通常使用的)在Visual Studio中创建一个windows MSI项目,该项目将自动为您执行所有这些操作,此处提供有用的信息:

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


    更新:
    这个问题的解决办法奏效了。问题在于添加dll的签名引用,此答案为在SSIS脚本任务中添加COM引用提供了一个很好的逐步解决方法。

    为什么不使用7zip进行尝试?不幸的是,我需要在没有第三方软件的情况下开发的解决方案:-(我需要将Interop.Shell32程序集安装到GAC中吗?如果需要,我可以从哪里下载gacutil?我需要将什么DLL放入GAC中?我已尝试安装“Interop.Shell32.DLL”和“Shell32.DLL”,但两者都不起作用。当我尝试安装SSIS在其临时文件夹中生成的Interop.Shell32.dll时,我被告知它没有强名称。安装Shell32.dll失败,因为模块应包含程序集清单。顺便说一句,使用Windows资源管理器通过拖放方式安装到GAC中也不起作用,正如我所说的阻止将文件拖放到C:\Windows\assembly虚拟文件夹中(即使在我以管理员身份运行时也是如此)。我必须安装.NET Framework SDK才能获得gacutil。最后,很遗憾,我无法接受您的上一个建议,因为我没有仅限Visual Studio的VSTA:-(我想我可以安装Visual Studio Express,但对于一个简单的归档问题来说,这需要付出相当大的努力!顺便说一下,我使用的是.NET Framework 3.5-因此System.IO.Compression也不是一个选项。