Не найдено исключение метода (EventWaitHandle..ctor) с использованием WinSCP .NET - PullRequest
2 голосов
/ 14 марта 2019

Я пытаюсь подключиться к SFTP-серверу, используя PowerShell и сборку WinSCP .NET.

Код не может открыть сеанс ($session.Open($sessionOptions)).

В журналах, которые я нашел,

Exception: System.MissingMethodException: Method not found: 'Void System.Threading.EventWaitHandle..ctor(Boolean, System.Threading.EventResetMode, System.String, Boolean ByRef, System.Security.AccessControl.EventWaitHandleSecurity)'. at WinSCP.ExeSessionProcess.TryCreateEvent(String name, EventWaitHandle& ev) at WinSCP.ExeSessionProcess.InitializeConsole() at WinSCP.ExeSessionProcess.Start() at WinSCP.Session.Open(SessionOptions sessionOptions) [2019-03-14 10:59:02.835Z] [0013] Session.Cleanup entering [2019-03-14 10:59:02.835Z] [0013] Terminating process

По сути, он переходит с $session.Open($sessionOptions) на $session.Dispose() и пропускает другую частькод.

Я пытался найти решение здесь на форуме WinSCP, но это не помогло:
https://winscp.net/forum/viewtopic.php?t=26140

try {
    Add-Type -Path "M:\AMA\ztemp_powershell\WinSCPnet.dll" 

    $sessionOptions = New-Object WinSCP.SessionOptions -Property @{
        Protocol = [WinSCP.Protocol]::Sftp
        HostName = "abc.xyz.ca"
        UserName = "abc_abc"
        Password = "*********"
        SshHostKeyFingerprint = "ssh-rsa 2048 **********************"
        PortNumber = 22
    }
    $session = New-Object WinSCP.Session   
    $session.ExecutablePath = "H:\FromLocal\Powershell\WinSCP.exe" 
    $filelist = Get-ChildItem M:\AMA\ztemp_powershell\sample_files

    try {
        # $session.DebugLogPath = "M:\AMA\ztemp_powershell\sftp1.log"
        $session.Open($sessionOptions)

        $transferOptions = New-Object WinSCP.TransferOptions
        $transferOptions.TransferMode = [WinSCP.TransferMode]::Binary

        foreach ($file in $filelist) {
            $transferResult =  $session.PutFiles("M:\AMA\ztemp_powershell\sample_files\$file" , "/outbox/", $false, $transferOptions)

            foreach ($transfer in $transferResult.Transfers) {
                Write-Host "Upload of $($transfer.FileName) succeeded"
            }
        }
    }
    finally {
        $session.Dispose()
    }
    exit 0
}
catch {
    Write-Host "Error: $_"
    exit 1
}

1 Ответ

1 голос
/ 14 марта 2019

На форуме вы писали, что использовали сборку WinSCP .NET 5.13.8.

  1. Вы отправили запрос в ветку о .NET Core 2.0 и
  2. , отсутствующий метод использует EventWaitHandleSecurity, который не является частью .NET Standard

Исходя из вышеизложенного, я предполагаю, что ваш проект нацелен на .NET Standard, который не поддерживается WinSCP 5.13.Я уже предложил вам в своем ответе на форуме WinSCP, чтобы вы обновились до WinSCP 5.14 RC, который поддерживает .NET Standard 2.0.

См. https://winscp.net/eng/docs/library

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...