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

问题描述 投票:0回答:2

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

Could not load file or assembly 'Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The system cannot find the file specified.

有什么建议吗?

其他注意事项:

  • 我将无法在 GAC 中添加 dll。
  • 我使用的是 SQL Server 2008。
c# sql-server-2008 ssis
2个回答
12
投票

通过“运行”,我认为从代理/命令行运行失败?它应该在 BIDS/SSDT 中工作。简而言之,DLL 必须向 GAC 注册,或者您可以下载源代码并将该项目添加到脚本任务中,然后引用该项目。

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

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

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


9
投票

您可以使用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的引用。

© www.soinside.com 2019 - 2024. All rights reserved.