8

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

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

有什么建议么?

我将无法在 GAC 中添加 dll。

我正在使用 SQL Server 2008。

4

2 回答 2

12

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

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

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

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

于 2012-07-23T13:58:04.040 回答
8

您可以使用反射在运行时从文件系统加载 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 的引用。

于 2016-09-19T10:55:44.830 回答