You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSIS任务中使用Renci.SshNet NuGet包出现引用异常求助

SSIS脚本任务中Renci.SshNet引用丢失问题的解决方法

针对你遇到的SSIS脚本任务保存后重新打开,Renci.SshNet导入报错的问题,以下是具体的解决步骤:

1. 手动管理程序集引用(替代NuGet自动安装)

SSIS的VSTA(Visual Studio Tools for Applications)环境对NuGet包的支持有限,保存后容易丢失引用,建议手动添加程序集:

  • 从NuGet包安装目录找到Renci.SshNet.dll,路径一般为你的解决方案目录\packages\Renci.SshNet.x.x.x\lib\net45(.NET 4.7兼容net45版本)
  • 打开SSIS脚本任务的VSTA编辑器,右键点击脚本项目 → 添加 → 引用 → 浏览,选中上述DLL添加引用
  • 选中刚添加的引用,在属性窗口将复制本地设置为True

2. 复制DLL到SSIS临时目录

VSTA会在临时目录生成脚本项目副本,手动复制DLL到临时目录可避免引用失效:

  • 关闭VSTA编辑器,找到临时目录:C:\Users\<你的用户名>\AppData\Local\Temp\Vsta
  • 删除该目录下的所有文件夹,重新打开脚本任务,此时会生成新的临时项目
  • 将Renci.SshNet.dll复制到新生成的临时项目的Assembly子目录中

3. 确认版本兼容性

  • 确保使用的Renci.SshNet版本支持.NET Framework 4.7,优先选择最新稳定版
  • 检查脚本项目的目标框架:右键脚本项目 → 属性 → 应用程序,确认目标框架为.NET Framework 4.7

4. 清理SSIS缓存

删除SSIS相关的临时缓存文件,避免旧引用残留:

  • 删除C:\Users\<你的用户名>\AppData\Local\Temp\VSTA和C:\Users\<你的用户名>\AppData\Roaming\Microsoft\VisualStudio\<VS版本>\VSTA下的缓存文件
  • 重启Visual Studio后重新打开SSIS项目

公私钥连接SFTP的脚本示例

using Renci.SshNet;
using System.IO;
using System;

public void Main()
{
    try
    {
        // 配置SFTP参数(建议用SSIS变量管理)
        string sftpHost = Dts.Variables["User::SftpHost"].Value.ToString();
        int sftpPort = int.Parse(Dts.Variables["User::SftpPort"].Value.ToString());
        string sftpUsername = Dts.Variables["User::SftpUsername"].Value.ToString();
        string privateKeyPath = Dts.Variables["User::PrivateKeyPath"].Value.ToString();
        string remoteFilePath = Dts.Variables["User::RemoteFilePath"].Value.ToString();
        string localNetworkPath = Dts.Variables["User::LocalNetworkPath"].Value.ToString();

        // 加载私钥并建立连接
        using (var privateKeyFile = new PrivateKeyFile(privateKeyPath))
        using (var client = new SftpClient(sftpHost, sftpPort, sftpUsername, privateKeyFile))
        {
            client.Connect();
            if (!client.IsConnected)
            {
                throw new Exception("SFTP连接失败");
            }

            // 下载文件到网络驱动器
            string localFilePath = Path.Combine(localNetworkPath, Path.GetFileName(remoteFilePath));
            using (var localStream = File.Create(localFilePath))
            {
                client.DownloadFile(remoteFilePath, localStream);
            }

            client.Disconnect();
            Dts.TaskResult = (int)ScriptResults.Success;
        }
    }
    catch (Exception ex)
    {
        Dts.Events.FireError(0, "SFTP下载任务", ex.Message, string.Empty, 0);
        Dts.TaskResult = (int)ScriptResults.Failure;
    }
}

内容的提问来源于stack exchange,提问作者Michael Scott

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 00:22:50