SQL Server作业中Newtonsoft.Json包加载失败问题求助
解决SSIS脚本在SQL Server代理中无法加载Newtonsoft.Json的流程
1. 确认SQL Server代理账户权限与DLL路径
- 打开服务器「服务」,找到SQL Server Agent,查看其登录身份(通常是NT SERVICE\SQLSERVERAGENT或自定义域账户)。
- 确保该账户对Newtonsoft.Json.dll所在文件夹拥有读取权限,推荐将DLL放在以下对应路径:
- 32位运行时:
C:\Program Files (x86)\Microsoft SQL Server\150\DTS\Binn(SQL Server 2019对应版本号150) - 64位运行时:
C:\Program Files\Microsoft SQL Server\150\DTS\Binn
- 32位运行时:
- 注意:SSIS作业如果勾选了「使用32位运行时」,必须对应放置32位的DLL,反之亦然。
2. 配置VS中脚本项目的NuGet包与复制属性
- 打开VS中的SSIS脚本任务,右键脚本项目 → 「管理NuGet程序包」,安装兼容.NET 4.7的稳定版Newtonsoft.Json(推荐12.0.3或13.0.1版本,避免过新的预览版)。
- 在脚本项目的引用中选中Newtonsoft.Json.dll,右键 → 「属性」,设置复制本地为
True,确保编译后DLL会随SSIS包一起打包。 - 检查脚本代码中的引用,避免强绑定版本号,直接使用:
using Newtonsoft.Json;
3. 添加程序集绑定重定向(解决版本冲突)
- 在脚本任务的项目中找到
app.config(无则新建),添加以下配置,强制SSIS使用指定版本的Newtonsoft.Json:
注:publicKeyToken为Newtonsoft.Json的固定值,无需修改。<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <!-- 替换newVersion为你实际使用的版本号 --> <bindingRedirect oldVersion="0.0.0.0-13.0.0.0" newVersion="13.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
4. 验证SSIS运行时环境配置
- 若使用项目部署模式:在SSMS中连接到Integration Services,检查SSIS目录的运行时配置,确保.NET框架版本为4.7,无冲突程序集。
- 若使用包部署模式:在SQL Server代理的作业步骤中,进入「执行SSIS包」的配置,确认「使用32位运行时」的勾选状态与你放置的DLL位数一致。
5. 手动测试与日志排查
- 用SQL Server代理的运行账户登录到服务器,手动双击运行SSIS包(.dtsx文件),验证是否能正常执行,以此排除账户权限或路径问题。
- 查看SQL Server代理的作业历史日志,获取详细的异常堆栈信息(日志中会显示具体的加载失败原因,比如版本不匹配、路径找不到),进一步定位问题。
内容的提问来源于stack exchange,提问作者Prayas Shrivastava
相关产品推荐
相关产品推荐

