我试图在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将全部由我照顾 - 有谁知道我错过了哪一步?
答案 0 :(得分:3)
SSIS需要所有.dll引用都在GAC注册,你是对的。
您有关于将此dll安装到GAC中的不同选项:
将.dll拖放到%windir%\ assembly \ 文件夹中。
使用您正在考虑使用的 gacutil.exe :关于使用gacutil安装到GAC,这里有很多有用的信息:Global_Assembly_Cache。基本上,如果您安装了.NET框架(您使用的是VB.NET,那么没有问题),您的Microsoft.NET文件夹中将有一个gacutil.exe。
(所有其他方法都失败时通常使用的内容)在Visual Studio中创建一个Windows MSI项目,自动为您完成所有这些工作,这里的有用信息:How to install assembly in the GAC using MSI
如果你在GAC中安装.dll并且你仍然遇到问题,另一种选择是实际创建一个单独的visual studio项目,其中包含用于操作所需zip文件的逻辑构建它并使用SSIS从SSIS调用它的exe。 执行流程任务。您可以传递SSIS包中指定的参数。不是很优雅,但是如果你热衷于使用SSIS,那就完成了工作。
这个问题的解决方案实现了技巧SSIS Script Task COMException / FileNotFoundException error。问题在于添加了dll的签名引用,这个答案为在SSIS脚本任务中添加COM引用提供了一个很好的逐步解决方法。