4

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

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

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

我以为 Interop DLL 都会为我处理好——有人知道我错过了哪一步吗?

4

1 回答 1

3

SSIS 需要向 GAC 注册所有 .dll 引用,您是正确的。

关于将此 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 项目,它会自动为您完成所有这些工作,这里有有用的信息如何使用 MSI 在 GAC 中安装程序集

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


更新:

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

于 2012-10-30T12:44:53.067 回答