首页 > 代码库 > ssis的script task作业失败(调用外部dll)
ssis的script task作业失败(调用外部dll)
原文 ssis的script task作业失败
我的ssis作业包里用了一个script task,会查询一个http的页面接口,获取json数据后解析然后做后续处理,其中解析json引用了本地目录下的第三方的类库:Newtonsoft.Json.dll
在vs环境中调试包的时候报错
1 2 3 4 5 | 在 System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) 在 System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) 在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) 在 System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams) 在 Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript() |
检查后发现:dll没有正确注册,需要做如下操作:
将dll拷贝到sqlserver的程序目录中,我的sqlserver是2012,版本号就是110,则文件需要拷贝到...\110\DTS\PipelineComponents目录中
向将类库注册到.net framework gac中,注册工具室gacutil.exe,因为我的dll是基于.net 4.0的,所以也需要使用4。0的gacutil,但是.net framework 只有1.1才有这个工具,版本却不对,不过这个工具在visual studio的安装中带了,我的vs版本为2012,则在系统应用程序目录下可以找到,我的目录是C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin中可以找到gacutil.exe,执行 gacutil.exe /i ***.dll,成功注册,再执行ssis package,不再出现以上错误。
C:\WINDOWS\system32>cd C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools>gacutil.exe /i C:\Users\LAY\Desktop\Newtonsoft.Json.dll Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.18020 版权所有(C) Microsoft Corporation。保留所有权利。
程序集已成功添加到缓存中
====================
批处理文件:
@SET GACUTIL="C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\gacutil.exe"Echo Install the dll into GAC%GACUTIL% -if C:\Users\LAY\Desktop\Newtonsoft.Json.dllpause
ssis的script task作业失败(调用外部dll)