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
在哪里可以找到 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 文件
我将 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
在哪里可以找到 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 文件