C# 在ssis脚本组件中添加第三方dll引用
我已经在我的脚本组件中添加了第三方引用(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服务包装器将其包围,然后引用服务 我也看到了这个答案,似乎您可以尝试动态加载引用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
//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内部触发