asp.net-mvc-3 - 从命名空间调用时,模块中的 F# 函数显示 "Method Not Found"

标签 asp.net-mvc-3 f#

我在一个名为 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 的程序集的一个版本进行编译而导致的,但在运行时加载了不同的版本。

发生这种情况的原因有很多,我能想到的两个原因是:

  • 将包含 DataAccess 的程序集版本部署到 gac。 .NET 程序集加载器始终使用 GAC 中部署的版本(如果存在),并且 GAC 中的版本很容易与最新的开发版本不同步。
  • 编译代码时,不会将包含 DataAccess 的程序集版本复制到 asp.net 项目的 bin 目录中。

  • 这发生在您的开发环境还是生产环境中?如果它在您的开发环境中,它应该很容易调试,只需在 Debug模式下运行项目,然后使用“调试”>“Windows”>“模块”窗口查看两个程序集的加载位置。一旦你知道应该很容易看出问题出在哪里。

    或者,它可能更容易将 DataAccess 和 FitnessController 放入同一个程序集中。

    关于asp.net-mvc-3 - 从命名空间调用时,模块中的 F# 函数显示 "Method Not Found",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7947268/

    相关文章:

    css - 滑动切换无法正常工作

    parsing - FParsec:如何保存解析器成功的文本

    f# - 如何引用 TypeProvider 创建的 'generated' 类型

    f# - 为什么 F# 会出现模块名称部分重叠的问题?

    list - 将列表附加到 F# 中的另一个列表是否会导致复制底层对象或仅复制指针?

    asp.net-mvc-3 - Action 返回局部 View 和模型

    asp.net - MVC 3 - JSON 序列化器

    javascript - Photo Sphere 照片上传验证

    c# - MVC : Repopulate filters form's fields without using Model

    f# - 从 F# 中的列表中提取单个元素