SSIS 脚本任务找不到 Newtonsoft.Json

SSIS script task can't find Newtonsoft.Json

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

"Could not load file or assembly 'Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The system cannot find the file specified.":"Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, 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 看不到它。

尝试使用 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()
{
    ...

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

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

之后,我从添加它们的位置引用了这些新的 dll,这解决了问题。

只有当您能够将 dll 安装到 server/computer 运行 您的 SSIS 程序包上的 GAC 中时,这才有效。

我知道已经找到了解决方案,但我想我会分享另一个适合我的解决方案。 以下是我如何使用 Visual Studio 2017 和 Netwonsoft 版本 13.0.1

解决它

Pre-requisite: 请确保您已在 SSIS、脚本任务中安装了 Newtonsoft 软件包。


我希望这对任何人都有帮助,就像对我有帮助一样。 无论如何,我 3 周前开始学习 C# 和 SSIS,我知道它有效但我不能解释太多。 感谢您的友好反馈和知识分享。


验证问题

据我了解,每个组件或任务都引用一个dll文件进行操作。该文件可以在“GAC_MSIL”

中找到

所以如果你在安装NewtonSoft后没有看到“Newtonsoft.Json”文件夹,那就说明问题出在这里。 您将需要使用 gacutils 进行安装或通过上述解决方案进行安装。

解决问题

1. Open Powershell as Administrator
2. Go to the nuget package folder (See Below)
3. Key in the following:
    a. e.g "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7 Tools\gacutil.exe" /i Newtonsoft.Json.dll

Install Assembly into GAC


在哪里可以找到 GAC_MSIL 文件夹

• .NET 1.0 - NET 3.5: c:\windows\assembly (%systemroot%\assembly)
• .NET 4.x: %windir%\Microsoft.NET\assembly

来自How to view the Folder and Files in GAC?

在哪里可以找到gacutil.exe

   e.g C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin

来自where is gacutil.exe?

在哪里可以找到 nuget 包?

  e.g C:\Users\username\.nuget\packages\newtonsoft.json.0.1\lib\net45

查找 DLL 文件