如何在Mono中安装和使用F# Powerpack?

6

我需要安装使用F# powerpack。 我在Mac上使用mono 2.10.2版本。

mono --version
Mono JIT compiler version 2.10.2 (tarball Mon Apr 18 09:14:01 MDT 2011)
Copyright (C) 2002-2011 Novell, Inc and Contributors. www.mono-project.com
        TLS:           normal
        SIGSEGV:       normal
        Notification:  kqueue
        Architecture:  x86
        Disabled:      none
        Misc:          debugger softdebug 
        LLVM:          yes(2.9svn-mono)
        GC:            Included Boehm (with typed GC)

安装。

  1. 此处下载PowerPack压缩文件。

  2. 将文件解压到目录~/bin中。

  3. ~/bin/FSharpPowerPack-1.9.9.9/bin添加到PATH中。我也添加了它到MONO_PATH,以防万一。(我不确定是否需要这样做)
  4. 对于~/bin/FSharpPowerPack-1.9.9.9/bin/gac中的dll,使用命令sudo gacutil -i <ALL_THE_FILES_IN_DLL>.dll

使用powerpack

我使用此页中的示例代码进行测试。我将其命名为linq.fs。

open Microsoft.FSharp.Linq
let adderExpr = <@ fun i -> i + 1 @>.ToLinqExpression()
let adder = <@ fun i -> i + 1 @>.Compile()

问题

  1. 我在使用fsc linq.fs /r:FSharp.PowerPack.Linq.dll时遇到了错误。可能出了什么问题?

    /Users/smcho/Desktop/fs/powerpack/linq.fs(1,38): 错误 FS0039: 字段、构造函数或成员“ToLinqExpression”未定义

    /Users/smcho/Desktop/fs/powerpack/linq.fs(2,34): 错误 FS0039: 字段、构造函数或成员“Compile”未定义

  2. 我需要使用gacutil -i安装所有dll吗?还是只需将dll路径添加到PATH/MONO_PATH环境变量中就可以了?


你遗漏了其中一个最重要的细节——Mono的版本是什么? - ildjarn
你的测试代码是否会打开Microsoft.FSharp.Linq - Joel Mueller
@Joel Mueller:是的,它有,我已经添加到原帖中了。 - prosseek
1个回答

4

您的安装过程似乎是正确的(只需解压缩并使用gacutil -i进行安装)。我认为示例只有一个小问题 - ToLinqExpression扩展方法可用于需要显式打开的模块,因此您的文件应该是:

编辑 正确的模块名称实际上是Microsoft.FSharp.Linq.QuotationEvaluation

open Microsoft.FSharp.Linq.QuotationEvaluation

let adderExpr = <@ fun i -> i + 1 @>.ToLinqExpression()
let adder = <@ fun i -> i + 1 @>.Compile()

我最近也碰到了这个问题。这是在2.0中更改的吗? - Daniel
我得到了 /Users/smcho/Desktop/fs/powerpack/linq.fs(1,28): error FS0039: The namespace 'QuotationEvaluator' is not defined 以及原始的错误信息。我不确定是否需要为不在 gac 目录中的 dll 运行 gacutil -i - prosseek
@prosseek - 抱歉,我把模块名称搞错了(应该是“QuotationEvaluation”!将文件添加到GAC并不是必须的,您可以使用完整路径引用它们,然后将它们复制到输出位置(与您的应用程序相同的目录)。 - Tomas Petricek
@Daniel - 我不确定,但我也认为它一定改变了。这个功能有点受限,所以我的猜测是F#团队不想过度强调它... - Tomas Petricek
谢谢,它可以工作。顺便说一下,我在使用dll时遇到了一些引用相关的错误,所以我在https://dev59.com/b1fUa4cB1Zd3GeqPLdC7上提出了另一个问题。 - prosseek
gacutil -i Error: Option -i takes 1 argument - mcandre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接