我重构了一个大型 F# 项目。它有一个自动构建命令,可以在 F# 编译器的一次长时间运行中编译所有源文件。这样我就可以轻松地进行可重现的构建。buildcommand 在构建项目之前在自身上运行 nunit-console,这一切都很好。重构之后,我的大部分单元测试开始失败:
异常:System.BadImageFormatException:尝试加载格式不正确的程序。(来自 HRESULT 的异常:0x8007000B)
这是使用 F# 2.0 编译项目时,我可以从命令行重现相同的问题(即不使用 NUnit)。堆栈跟踪通常指向一段无害的新代码(一个只存储一些数据而没有做任何明显的事情的构造函数)。
但是,当使用 F# 3.0 编译项目时,所有在 F# 2.0 下遇到问题并且我尝试过的单元测试都通过了。这是从命令行调用时(不使用 NUnit)。NUnit 现在声称我可以手动调用的新编译的可执行文件不存在。有一个很长的堆栈跟踪,顶部有文件未找到异常。(我没有尝试使用 F# 3.0 构建 buildcommand,因此它的单元测试仍然可以正常运行也就不足为奇了)。
Google 建议 HRESULT: 0x8007000B 可能是由编译器错误引起的。这可能是一个糟糕的工匠指责他的工具的情况,但是当使用 F# 3.0 时问题就消失了。有人可以提出任何建议以尝试在 F# 2.0 下重新运行吗?
我对使用 F# 3.0 并不太担心。但我真的需要 NUnit 才能工作。有谁知道可能出了什么问题?重申一下,Nunit 无法加载从命令行启动时运行良好的可执行文件,但在使用 F# 2.0 而不是使用 F# 3.0 编译时从同一位置加载相同的可执行文件。
对于这方面的任何帮助,我将不胜感激。非常感谢。