SSIS的script task作业失败(调用外部dll eg NPOI)

SSIS调用外部dll,导致作业失败,加载dll失败( eg NPOI)

以下两种方式:

1.注册GAC 方式(本人使用失败后,没采取此方式,由于需要强签名Dll 才可以);
2.注册一个AppDomain.AssemblyResolve事件处理程序

  1. .NET Framework为需要更好地控制程序集加载的应用程序提供了AppDomain.AssemblyResolve事件。通过处理此事件,您的应用程序可以从正常探测路径外部将程序集加载到加载上下文中,从多个程序集版本中选择要加载的版本,发出动态程序集并返回它,依此类推。
  2. 问题是在哪里以及如何连接它。诀窍是要认识到.NET的即时(JIT)编译负责加载依赖的程序集,因此可以保证在执行该方法之前,不会加载类型方法中引用的程序集。这意味着在类型的静态构造函数中,我们可以可靠地连接AssemblyResolve事件,该事件将提供引用的类型。
  3. 当您创建SSIS脚本任务或脚本组件时,SSIS会为您生成一个名为ScriptMain的类,您可以在该类型的静态构造器中连接该事件。保证“在创建第一个实例之前或引用任何静态成员之前”将完全调用一次静态构造函数,因此要在加载相关程序集之前进行。
 		static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            if (args.Name.Contains("NPOI"))
            {
                string path = @"C:\Program Files\Microsoft SQL Server\120\DTS\PipelineComponents\";
                return System.Reflection.Assembly.LoadFile(System.IO.Path.Combine(path, "NPOI.dll"));
            }
            return null;
        }
        
        static ScriptMain()
        {
            AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
       
        }

先在项目添加引用,保证代码可正常编译
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值