在ssis脚本组件中添加第三方dll引用

时间:2012-07-23 10:57:00

标签: c# sql-server-2008 ssis

我在我的脚本组件中添加了第三方引用(Json newtonsoft)dll(使用编辑脚本选项),但是当我运行包时,我收到错误

无法加载文件或程序集“Newtonsoft.Json,Version = 4.5.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed”或其中一个依赖项。系统找不到指定的文件。

有什么建议吗?

我将无法在GAC中添加dll。

我正在使用SQL Server 2008。

2 个答案:

答案 0 :(得分:9)

通过“运行”,我假设从代理/命令行运行失败?它应该在BIDS / SSDT内部工作。简短的回答是DLL必须在GAC注册,或者您可以下载源代码并将该项目添加到脚本任务中,然后引用所述项目。

查看该项目,它应该是一个强签名的DLL(基于Dynamic.snk的存在),因此能够添加到GAC。哦,但是您声明无法将其添加到GAC中,这意味着它是权限而不是功能问题。

如果是这种情况,可以使用源代码编译项目,也可以使用Web服务包装器将其包围,然后引用该服务。

我也看到了这个答案,似乎你可以尝试动态加载引用。

答案 1 :(得分:5)

您可以使用Reflection在运行时从文件系统加载dll,而无需在GAC中安装。如果无法在GAC中安装许可,这将非常有用。

//Add a Static Constructor which is guaranteed to be called exactly once
// “before the first instance is created or any static members are referenced.”, 
// so therefore before the dependent assemblies are loaded.

 static ScriptMain()
 {
    AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
 }

 //Provide path to dll stored in folder on file system
 static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
 {

     string path = @"D:\DLL\";
     return System.Reflection.Assembly.LoadFile(System.IO.Path.Combine(path, "Newtonsoft.dll"));

  }

当然,您还需要在脚本任务中添加对dll的引用。