Неперехватываемое исключение SSH.NET

Я пытаюсь загрузить файл с помощью SSH.NET с помощью С# в проекте .NET Framework 4.5.2.

Как только вызывается конструктор ConnectionInfo, приложение завершает работу без какого-либо исключения, а не сообщения об ошибке. Средство просмотра событий чистое.

Кажется, я столкнулся с AccessViolationException, я знаю, что это серьезная проблема, и ее нельзя поймать внутри управляемого кода, но... Что я делаю неправильно при использовании этой библиотеки? Мне просто нужно загрузить файл на SFTP-сервер.

Вот мой код:

public override void Upload(FtpConfiguration conf, string file)
{
    var fi = new FileInfo(file);

    try
    {
        // As soon as code reach this line the application crashes
        var connectionInfo = new ConnectionInfo(conf.Server,
                                                conf.Username,
                                                new PasswordAuthenticationMethod(conf.Username, conf.Password)
                                                );
        using (var sftp = new SftpClient(connectionInfo))
        {
            sftp.Connect();

            if (sftp.IsConnected)
            {
                if (!string.IsNullOrEmpty(conf.Subfolder))
                    sftp.ChangeDirectory(conf.Subfolder);
                using (var fileStream = new FileStream(fi.FullName, FileMode.Open))
                {
                    sftp.UploadFile(fileStream, fi.Name, null);
                }
                sftp.Disconnect();
            }
        }
    }
    catch (Exception ex)
    {
        // Just for debug purpose
        var error = ex.Message;

        throw ex;
    }
}

person WaveMax    schedule 09.03.2021    source источник
comment
Я уже пытался украсить метод HandleProcessCorruptedStateExceptions, но так и не смог поймать исключение   -  person WaveMax    schedule 09.03.2021
comment
Следовали ли вы этому руководству: stackoverflow.com/a/4759831/1220550 (нет опыта работы с ним, я только что нашел его)   -  person Peter B    schedule 09.03.2021
comment
пробовали ли вы использовать эти документы. microsoft.com/en-us/dotnet/framework/configure-apps/ ?   -  person NullReference    schedule 09.03.2021
comment
Да, уже перешел по обеим ссылкам, пока безрезультатно   -  person WaveMax    schedule 09.03.2021


Ответы (2)


Что ж, я предполагаю, что все ваши свойства FtpConfiguration conf, используемые как в ConnectionInfo, так и в PasswordAuthenticationMethod, относятся к типу string, но я думаю, что вам не хватает port, который должен быть int. Это должно работать.

ConnectionInfo connectionInfo = new ConnectionInfo(host, port, user,
                                     new PasswordAuthenticationMethod(user, pass));

using (var client = new SftpClient(connectionInfo))
{

      client.Connect();
      // Do some stuff.
      client.Disconnect();
}
person ɐsɹǝʌ ǝɔıʌ    schedule 09.03.2021
comment
Я только что добавил порт (по умолчанию 22), но поведение, похоже, такое же. - person WaveMax; 09.03.2021
comment
Вы также проверяли значения для host, user и pass при создании объекта ConnectionInfo? - person ɐsɹǝʌ ǝɔıʌ; 09.03.2021
comment
Да, все данные верны. FileZilla отлично работает с теми же значениями - person WaveMax; 09.03.2021
comment
Я пробовал как добавлять sftp://, так и использовать сам хост, но с тем же результатом. Но если бы это была проблема с учетными данными или хостом, я бы не ожидал такой серьезной проблемы... обычного исключения было бы достаточно. - person WaveMax; 09.03.2021
comment
Я пытаюсь выяснить, в чем проблема, поскольку ваш код кажется мне правильным, а мой был успешно протестирован. host не должен содержать протокол, поэтому некоторые, такие как ftp.myhost.com, являются правильными. - person ɐsɹǝʌ ǝɔıʌ; 09.03.2021

Я думаю, что нашел решение. Мой метод Upload находился внутри асинхронной цепочки задач. Избавление от асинхронности решило проблему.

person WaveMax    schedule 10.03.2021