【发布时间】:2012-08-11 03:26:36
【问题描述】:
我重构了一个大型 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 编译时从同一位置加载相同的可执行文件。
我将非常感谢您对此提供的任何帮助。非常感谢。
【问题讨论】: