Точка входа не найдена при вызове 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, но иногда мир несправедлив (в моем случае неправильный загрузчик сборок).