SSIS脚本任务找不到Newtonsoft.Json

时间:2019-03-08 16:54:31

标签: c# ssis ssis-2012 gac

我已将dll安装到GAC,甚至更新了该dll,以将其安装到GAC中,但出现此错误:

  

“无法加载文件或程序集'Newtonsoft.Json,版本= 4.5.0.0,文化=中性,PublicKeyToken = 30ad4fe6b2a6aeed'或其依赖项之一。系统找不到指定的文件。”:“ Newtonsoft.Json,版本= 4.5.0.0,文化=中性,PublicKeyToken = 30ad4fe6b2a6aeed“}

App.config

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
            <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
         </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

GAC位置:

  

C:\ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ Newtonsoft.Json \ v4.0_12.0.0.0__30ad4fe6b2a6aeed \ Newtonsoft.Json.dll

我也将dll复制到了C:\ Windows \ System32,但是当我尝试从该位置将其添加为参考文件时,visual studios看不到它。

2 个答案:

答案 0 :(得分:1)

在找不到错误后引发错误时,尝试使用ResolveEventHandler委托加载.dll。这可以直接在Main()方法的上方。

static ScriptMain()
{
 AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
}
static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    if (args.Name.ToUpper().Contains("NEWTONSOFT"))
    {
   string path = @"C:\DLL File Path\";
   return System.Reflection.Assembly.LoadFile(System.IO.Path.Combine(path, "Newtonsoft.Json.dll"));
    }
    return null;
}
public void Main()
{
    ...

答案 1 :(得分:1)

为解决此问题,我添加了一个新的脚本任务并从其中打开了块。

我安装了Microsoft.AspNet.WebApi.Client软件包,然后从该软件包中将System.Net.Http和Newtonsoft.Json dll添加到了我的GAC。

此后,我从将它们添加到的位置引用了这些新的dll,并解决了该问题。

仅当您能够将dll安装到运行SSIS软件包的服务器/计算机上的GAC中时,此方法才起作用。