我在一个名为 DataAccess 的模块中定义了一个函数,如下所示
module DataAccess
let getData() =
["abc";"def"]
然后我使用 F# MVC Controller 像这样提取数据
[<HandleError>]
type FitnessController() =
inherit Controller()
member x.Index() =
let data = DataAccess.getData() |> List.map(fun p -> p) |> List.toArray
x.View(data) :> ActionResult
我得到了智能感知并且一切构建良好,但是当网页弹出时它说该方法不存在
Method not found: 'Microsoft.FSharp.Collections.FSharpList`1<Models.Entity> DataAccess.getData()'.
当我查看 dotPeek 中的程序集时,它确实显示为返回 FSharp 列表的静态方法。我在这里遗漏了一些明显的东西吗?
(忽略 getData 和 map 函数什么都不做的事实,为了简洁起见,我省略了代码,getData 只包含标记为可序列化的记录类型,但即使在此处的代码示例中使用字符串时,我仍然会收到错误)我还应该说这是带有 Razor C# 页面的 MVC 3。
最佳答案
您是否在同一程序集中或不同程序集中定义了 DataAccess 和 FitnessController?
如果它们是在不同的程序集中定义的,那么这个错误几乎肯定是由包含 FitnessController 的程序集针对包含 DataAccess 的程序集的一个版本进行编译而导致的,但在运行时加载了不同的版本。
发生这种情况的原因有很多,我能想到的两个原因是:
这发生在您的开发环境还是生产环境中?如果它在您的开发环境中,它应该很容易调试,只需在 Debug模式下运行项目,然后使用“调试”>“Windows”>“模块”窗口查看两个程序集的加载位置。一旦你知道应该很容易看出问题出在哪里。
或者,它可能更容易将 DataAccess 和 FitnessController 放入同一个程序集中。
关于asp.net-mvc-3 - 从命名空间调用时,模块中的 F# 函数显示 "Method Not Found",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7947268/