SSIS 脚本任务失败 NewtonSoft.Json

SSIS Script Task Fails with NewtonSoft.Json

我在 SSIS 的脚本任务中嵌入了 C# 代码,我安装了 NewtonSoft.Json 用于一些 json 处理。当我 运行 包时,出现以下错误:

Could not load file or assembly 'Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The system cannot find the file specified.

尽管尝试了所有解决方案和建议(从 NuGet 管理器和控制台卸载并重新安装包,或手动添加引用等),但每当我 运行 SSIS 包时仍然得到同样的错误,脚本任务组件失败。

我正在使用 Visual Studio 2017 (SSDT)。

如何永久解决问题?

使用 SSIS,您只能引用安装在 GAC 上的程序集。使用 gacutil,从 Windows SDK 将所需的程序集安装到 GAC

gacutil -I "[DriveLetter]:\[PathToBinDirectoryInVSProject]\gac.dll"

如果 GAC 不可用,您仍然可以使用 AssemblyResolve 指向自定义文件夹。

        static ScriptMain()
        {
            AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
        }

        static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            string name = new System.Reflection.AssemblyName(args.Name).Name;
            string library_path = Environment.GetEnvironmentVariable("LIBRARY_PATH", EnvironmentVariableTarget.Process);
            string dll = (library_path + @"\" + name + ".dll").Replace(@"\", @"\");

            if (File.Exists(dll))
            {
                return System.Reflection.Assembly.LoadFile(dll);
            }

            return null;
        }