Точка входа не найдена при вызове Dispose

Я тестирую блок кода, который использует вложенный оператор using. Я изменил это на using заявление в try/finally блок. Когда я пытаюсь позвонить Dispose метод в finally блок я получаю EntryPointNotFoundException, Я перепробовал много вещей, но я не уверен, как решить эту проблему. Вот мой код:

var memoryStream = new MemoryStream(message.FileContent);

try
{
    using (var sftpClient = this.GetSftpClientFromId(message.CustomerId))
    {
        return sftpClient.UploadFileAsync(memoryStream, message.FileName, true);
    }
}
finally
{
    memoryStream?.Dispose();
}

Как я могу решить эту проблему?

0 ответов

Только что это случилось.

В итоге проблема заключалась в следующем:

Укороченная версия:

Сборка имеет ссылку на объект, который реализует IDisposable в будущей версии, но старая версия была загружена во время выполнения. Поэтому, когда он пытался вызвать Dispose(), которого не было в старой версии, он выдает ummmmm EntryPointNotFoundException!

Длинная версия:

  • В версии 1 ThirdPartyComponent Thing не реализовывал IDisposable.
  • В версии 2 ThirdPartyComponent, Thing было реализовать IDisposable.
  • ProjectA был построен со ссылкой на версию 2 ThirdPartyComponent. IDisposable действителен, и "using" компилируется нормально.
  • ProjectA загрузил версию 1 ThirdPartyComponent и пытается вызвать Dispose(). Это пугает, потому что в версии 1 нет "Dispose()". Конечно, должна была быть загружена версия 2, но иногда мир несправедлив (в моем случае неправильный загрузчик сборок).
Другие вопросы по тегам