构建要在C#中使用的F#库

时间:2010-10-10 01:45:28

标签: c# visual-studio-2010 dll f# mono

假设我有以下功能。

let rec fib n =
    match n with
    | 1 | 2 -> 1
    | n -> fib(n-1) + fib(n-2)

如何将此代码编译成dll,以便从C#中使用?

我同时使用mono(在Mac OS X中)和Visual Studio 2010.

ADDED

我添加了以下内容来制作命名空间。

namespace MyMath.Core
module public Process=

fsc --target:library facto.fs给了我facto.dll。

使用此代码的C#代码如下。

using System;
using MyMath.Core;

class TestFSharp {
    public static void Main() {
        int val = MyMath.Core.Process.fib(10);
        Console.WriteLine(val);
    }
}

dmcs /r:facto.dll testf.cs给了我tesetf.exe。

1 个答案:

答案 0 :(得分:14)

好吧,如果你将它放在Program.fs文件中,并将其编译成library(带--target:library),那么它将从C#中显示为

Program.fib(5)

另见call F# dll in C#

但是,如果您计划将F#代码公开给C#,则可能需要使用名称空间和类型。有关详情,请参阅F# Component Design Guidelines