Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ssis脚本组件中添加第三方dll引用_C#_Sql Server 2008_Ssis - Fatal编程技术网

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

C# 在ssis脚本组件中添加第三方dll引用,c#,sql-server-2008,ssis,C#,Sql Server 2008,Ssis,我已经在我的脚本组件中添加了第三方引用(Json newtonsoft)dll(使用编辑脚本选项),但是当我运行包时,我得到了一个错误 无法加载文件或程序集“Newtonsoft.Json,Version=4.5.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6eed”或其依赖项之一。系统找不到指定的文件 有什么建议吗 我将无法在GAC中添加dll 我正在使用SQL Server 2008。通过“运行”,我假设从代理/命令行运行失败了?它应该在BID

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

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

有什么建议吗

我将无法在GAC中添加dll

我正在使用SQL Server 2008。

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

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

如果是这样的话,要么用源代码编译项目,要么用web服务包装器将其包围,然后引用服务

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


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

这可能就是您的问题所在。我目前正在开发SSIS控制流任务,我在任务UI项目中发现了相同的问题。最后我不得不注册它,因为我没有找到其他解决方案。你不能将其添加到GAC中有什么原因吗?我在2017年版本中不能这样做,我发布了一个问题,我已经删除了newtonsoft dll的引用,并使用.net的JavaScriptSerializer类进行序列化。我也会尝试这样做。这是解决此问题的常见方法。我已经成功地使用了这个。但我对这个问题还有另外一个方面。我希望从DEV/TEST/UAT/PROD环境的不同文件夹加载DLL,而无需更改code@user437239这仍然是唯一的解决办法吗?这一点非常重要,如果对dll内部的任何调用都必须放在main之外,那么也值得一提,因为解析不会在main内部触发