F#脚本中的F#dll

时间:2015-03-30 15:55:11

标签: c# dll f#

我有一个需要在F#中引用的C#dll。我可以在.fs文件中做到这一点,但我似乎无法在F#脚本(.fsx)中使用它。这很奇怪,因为在我的脚本中,我引用F#dll没有问题。我认为C#dlls和F#dll基本相同。

编辑:

我有两个dll(1)csharp.dll和(2)fsharp.dll分别用csharp和fsharp构建。我用它们来引用它们:

#r "bin\Debug\csharp.dll"
#r "bin\Debug\fsharp.dll"
编译器识别的

。出现这种情况的行如下所示:

let new_object = new fsharp.type(Observable<csharp.type>)

我在fsharp.dll中创建了一个对象,它接受csharp.dll中定义的类型的观察者。当我尝试在FSharp交互式中运行它时,我收到以下错误:

错误FS0074:通过&#39; csharp.type&#39;引用的类型在未引用的程序集中定义。您必须添加对程序集的引用&#39; csharp&#39;。

没有意义的是csharp.type已成功用于前一行。但是当我们用fsharp.type引入csharp.type时,我突然得到一个错误,说csharp类型缺少一个程序集引用,即使问题似乎与fsharp.type有关。

2 个答案:

答案 0 :(得分:1)

您似乎还需要在脚本System.Reactive.dll中或在定义类Observable<T>的地方引用

答案 1 :(得分:0)

@Petr是正确的。您需要添加所有引用及其引用。

如果您使用的是Visual Studio,我建议您安装Visual F#Power Tools。安装后,右键单击项目下的“引用”,然后选择“为F#interactive生成引用”。

这将生成(并保持更新!)文件

  • {ProjRoot} /Scripts/load-references.fsx
  • {ProjRoot} /Scripts/load-project.fsx

因此,在您的F#脚本中(假设它位于项目根目录中),您只需执行

#load "Scripts/load-project.fsx"

这些生成的文件应该进入您选择的版本控制。