调用Dispose时未找到入口点

时间:2017-03-22 08:34:10

标签: c# unit-testing entrypointnotfoundexcept

我正在测试一段使用嵌套使用语句的代码。我已将其更改为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();
}

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

发生这种情况。

问题最终是:

简短版本:

程序集引用了在将来的版本中实现IDisposable的对象,但是在运行时加载了旧版本。因此,当它尝试调用旧版本中不存在的Dispose()时,它就会变成ummmmm EntryPointNotFoundException!

长版:

  • 在ThirdPartyComponent的版本1中,没有实现IDisposable。
  • 在ThirdPartyComponent的版本2中, did 实现IDisposable。
  • ProjectA的构建引用了ThirdPartyComponent的版本2。 IDisposable有效,并且“ using”被编译就很好。
  • ProjectA加载了ThirdPartyComponent的版本1,并尝试调用“ Dispose()”。它之所以疯狂,是因为版本1中没有“ Dispose()”。当然,它应该已经加载了版本2,但有时世界并不公平(在我的情况下,这是自定义程序集加载器搞砸了。