SSIS脚本任务未执行首行代码即报错求助
解决方案
1. 确认.NET框架版本兼容
SSIS脚本任务的目标.NET版本必须与WinSCPNet.dll的编译版本一致:
- 右键SSIS脚本任务 → 编辑脚本 → 在解决方案资源管理器中右键脚本项目 → 属性 → 查看目标框架版本
- 下载与该版本匹配的WinSCPNet.dll包(WinSCP官网提供.NET 2.0/3.5/4.x等不同版本)
2. 正确部署依赖文件到执行环境
SSIS执行引擎可能无法读取GAC或自定义路径中的dll,建议:
- 将WinSCPNet.dll和其依赖的
WinSCP.exe一起复制到SSIS执行引擎的目录:- 32位环境:
C:\Program Files (x86)\Microsoft SQL Server\<你的SQL版本>\DTS\Binn - 64位环境:
C:\Program Files\Microsoft SQL Server\<你的SQL版本>\DTS\Binn
- 32位环境:
- 若需自定义路径,可在脚本任务中通过代码手动加载dll:
System.Reflection.Assembly.LoadFrom(@"D:\YourCustomPath\WinSCPNet.dll");
3. 检查执行账户权限
- SSIS执行时使用的账户(如SQL Server代理账户)需要拥有WinSCPNet.dll所在目录的读取权限
- 若使用GAC部署,需确保执行账户有权限访问GAC中的dll(默认管理员组有访问权,普通账户需配置对应权限)
4. 捕获真实的内部异常
Target of an invocation是包装异常,无法直接定位问题,需修改代码捕获内部异常:
try { // 你的SFTP业务代码 var session = new WinSCP.Session(); // ...其他操作 } catch (Exception ex) { // 逐层获取内部异常 while (ex.InnerException != null) { ex = ex.InnerException; } // 将真实异常信息抛出或写入日志 throw new InvalidOperationException("SFTP操作失败:" + ex.Message, ex); }
通过这种方式可以获取到真正的错误原因,比如依赖缺失、版本不兼容、权限不足等。
内容的提问来源于stack exchange,提问作者Glen
相关产品推荐
相关产品推荐

