2012-07-23 109 views
3

我已经加入第三方参考(JSON newtonsoft)DLL在我的脚本组件(使用编辑脚本选项),但是当我运行该程序包,我得到一个错误在SSIS的脚本组件添加第三方dll引用

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

有什么建议吗?

我将无法在GAC中添加该dll。

我使用SQL Server 2008的

+1

那可能是你的问题了。我目前正在开发SSIS控制流任务,并发现与我的任务UI项目相同的问题。最后我必须注册它,因为我没有找到其他解决方案。是否有理由不能将其添加到GAC? – zeencat 2012-07-23 11:10:27

回答

5

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

看着这个项目,它应该是一个强大的签名DLL(基于Dynamic.snk的存在),因此可以添加到GAC中。哦,但是你说你将不能将添加到GAC中,这意味着它是一个权限而不是能力问题。

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

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

+1

我已经删除了newtonsoft dll的引用,并使用.net的JavaScriptSerializer类进行序列化。 – HashCoder 2012-07-24 12:28:18

2

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

+0

10x对我来说工作得很好=) – oCcSking 2017-09-26 14:18:56