这非常奇怪,我希望有人会有一些见解来理解这一点。
我有一个 F# 2.0(Visual Studio 2010,针对 .Net 4.0)解决方案,它在我最初创建它的位置可以正常工作,但是如果我尝试将它复制到一个新文件夹(因为我想将它签入源代码管理),我在构建时遇到了一些非常奇怪的错误。它们往往是这样的:
error FS0803: Invalid use of a type name and/or object constructor. If necessary use 'new' and apply the constructor to its arguments, e.g. 'new Type(args)'. Overloads are: None() : unit.
或者
error FS0001: This expression was expected to have type obj option but here has type Some<'a>
这些错误仅在使用选项类型时发生,其中一种用法的简单示例是:
let asOption e =
match e with
| null -> None
| _ -> Some(e)
现在,请记住,这是一个在其原始位置编译得很好的解决方案。我已经尝试过类似 Clean/Rebuild、删除 obj 和 bin 目录、重新启动 Visual Studion 等显而易见的方法,但还是一样。
在这两种情况下,引用 DLL 都是相同的,GAC 的 DLL 是从 GAC 引用的,非 GAC 的 dll 是从相同的相对路径复制和引用的。只是为了好玩,我什至比较了用于编译每个解决方案的 Fsc.exe 调用的输出窗口文本,以确保在两种情况下都使用相同的参数调用编译器,当然,确实如此。
任何人都知道可能导致这种情况的原因吗?我是否以某种方式从 GAC 中获得了一些奇怪的 FSharp.Core.dll 版本?我只是倒霉蛋中最倒霉的一个吗?