我有一个在名为DataAccess的模块中定义的函数,就像这样
module DataAccess
let getData() =
["abc";"def"]
Run Code Online (Sandbox Code Playgroud)
然后我使用F#MVC控制器将数据拉出来
[<HandleError>]
type FitnessController() =
inherit Controller()
member x.Index() =
let data = DataAccess.getData() |> List.map(fun p -> p) |> List.toArray
x.View(data) :> ActionResult
Run Code Online (Sandbox Code Playgroud)
我得到intellisense并且所有构建都很好,但是当网页弹出时它表示该方法不存在
Method not found: 'Microsoft.FSharp.Collections.FSharpList`1<Models.Entity> DataAccess.getData()'.
Run Code Online (Sandbox Code Playgroud)
当我看一下dotPeek中的程序集时,它确实显示为一个返回FSharp列表的静态方法.我错过了一些明显的东西吗?
(忽略getData和map函数什么都不做的事实我为了简洁省略了代码,getData只包含被标记为可序列化的记录类型,但是即使在代码示例中使用字符串时我仍然会收到错误)I还应该说这是带有Razor C#页面的MVC 3.
您是否在同一个程序集或不同的程序集中定义了DataAccess和FitnessController?
如果它们在不同的程序集中定义,则此错误几乎肯定是由包含FitnessController的程序集引起的,该程序包是针对包含DataAccess的程序集的一个版本编译的,但在运行时加载了不同的版本.
出现这种情况有很多原因,我能想到的两个原因是:
这是发生在您的开发环境还是生产环境中?如果它在您的开发环境中,它应该相当容易调试,只需在调试模式下运行项目,然后使用Debug> Windows> Modules窗口查看从哪里加载两个程序集.一旦你知道应该很容易看到问题的来源.
或者,它可能只是更容易DataAccess和FitnessController进入相同的程序集.