LibTiff.NET ReadDirectory仅在单元测试期间提供System.ObjectDisposedException

时间:2012-08-24 18:44:32

标签: c# .net unit-testing libtiff.net

编辑:对于未来的读者来说,这个问题已经在BitMiracle的LibTiff.NET版本2.3.606.0中得到修复。

我在我的C#库(在.NET 3.5 | x86中编译)中使用BitMiracle的LibTiff.NET(版本2.3.605.0及更低版本)并在调用ReadDirectory时不断收到此异常:{{1} }

我意识到这似乎表明我在打电话之前已经处理了我的照片......但我没有专门这样做。这是图书馆里的一个错误还是我真的错过了什么?

这是我的代码:

System.ObjectDisposedException: Cannot write to a closed TextWriter

编辑:好的,经过一些进一步测试后我得到了更多信息,这只是在我运行单元测试时才会发生的!不知道为什么会改变任何东西。

1 个答案:

答案 0 :(得分:2)

由于其他线程在讨论单元测试并在尝试写入控制台时遇到同样的错误(ObjectDisposedException when outputting to console),我意识到LibTiff.NET库试图写入错误控制台。浏览完源代码后,我发现这段代码:

        using (TextWriter stderr = Console.Error)
        {
            ...
        }

因为它们在使用中将所有写入的错误包装出来,所以它在第一次写入错误输出后处理了Console.Error对象。这导致第二次出现错误(ReadDirectory执行链接列表上调用Next的操作)。所以我删除了使用,问题得到解决!

        TextWriter stderr = Console.Error;
        ...

所以,这里的教训是:不要处理你的标准输出:)

我问过另一个问题,为什么他们被允许在单元测试中处理标准输出,而不是在其他情况下处理:.NET - Why is disposing of standard output only allowed during unit tests? 。如果您对问题有任何答案,请将其发布在那里。