如何将VS2013含脚本任务的SSIS包升级至VS2015适配SQL Server2016
解决SSIS包升级到SQL Server 2016后脚本任务报错的问题
这个“Exception has been thrown by the target of an invocation”属于脚本任务的典型泛型错误,本质是脚本内部抛出了异常但未被正确暴露出来。结合你从SQL Server 2014升级到2016的场景,我整理了几个针对性的排查和解决步骤:
1. 先捕获具体的内部错误信息
泛型错误没有实际诊断价值,第一步必须拿到真实的错误原因。在你的脚本任务里添加完整的异常捕获,把内部错误输出到SSIS日志:
public void Main() { try { // 这里放置你原有的脚本代码 Dts.TaskResult = (int)ScriptResults.Success; } catch (Exception ex) { // 拼接完整的异常信息(包括内部异常) string errorDetail = $"脚本执行失败: {ex.Message}\n堆栈跟踪: {ex.StackTrace}"; if (ex.InnerException != null) { errorDetail += $"\n内部异常: {ex.InnerException.Message}\n内部堆栈跟踪: {ex.InnerException.StackTrace}"; } // 将错误信息输出到SSIS日志 Dts.Events.FireError(0, "脚本任务异常", errorDetail, string.Empty, 0); Dts.TaskResult = (int)ScriptResults.Failure; } }
重新部署包并执行后,你就能看到具体的错误原因(比如API版本不兼容、权限不足、依赖库缺失等),这是后续排查的核心。
2. 确认脚本任务的.NET Framework目标版本
SQL Server 2016的SSIS运行时依赖.NET Framework 4.6,而VS2015默认创建的脚本任务可能使用旧版本框架:
- 打开脚本任务编辑器,点击「Edit Script」进入脚本编辑界面
- 右键脚本项目选择「属性」,在属性窗口找到「目标框架」选项
- 确认选择的是
.NET Framework 4.6(或兼容的更高版本如4.6.1),若不是则修改后重新编译脚本
3. 检查脚本中的API兼容性
SQL Server 2014到2016,SSIS相关类库有一些变化需要注意:
Microsoft.SqlServer.Dts.Runtime命名空间下部分方法被标记为过时,或参数有调整- 如果脚本用到了SQL Server管理对象(SMO),要确保引用的是SQL Server 2016对应的版本,而非2014的旧版本
- 避免使用已废弃的SSIS配置读取方式,比如某些旧的变量访问方法
4. 验证部署后的运行权限
部署成功不代表运行时权限足够:
- 确认执行SSIS包的账户(如SQL Server代理账户)拥有脚本涉及资源的访问权限(比如读写文件、连接数据库、访问网络共享等)
- 如果脚本用到本地资源,要确认SSIS服务账户或代理账户有对应的操作权限
5. 用官方SSIS升级向导重新升级包
有时候直接在VS2015中打开升级可能遗漏配置,试试官方工具:
- 打开「SQL Server Integration Services Upgrade Wizard」(在SQL Server安装目录的工具组中)
- 选择要升级的SSIS包(.dtsx文件),按照向导步骤升级到SQL Server 2016格式
- 升级完成后再导入到VS2015中重新部署
内容的提问来源于stack exchange,提问作者Narsimha V
相关产品推荐
相关产品推荐

