2014-12-07 60 views
2

我在交互式控制台中加载FSharp.Data。该库被加载没有任何问题:F#交互式CsvProvider未定义

> #r "FSharp.Data.dll";; 

--> Referenced 'C:\Users\pw\AppData\Local\Temp\FSharp.Data.dll' (file may be locked by F# Interactive process) 

> open FSharp.Data;; 

然而,当我试图初始化CsvProvider(在FSharp.Data定义)我得到错误信息说的类型没有定义:

> type Stocks = CsvProvider<"C:\Users\pw\Downloads\msft.csv">;; 

type Stocks = CsvProvider<"C:\Users\pw\Downloads\msft.csv">;; 
--------------^^^^^^^^^^^ 

stdin(62,15): error FS0039: The type 'CsvProvider' is not defined 

我认为问题可能是文件和程序集路径,但现在我使用绝对路径,错误依然存在。另一方面,当我创建一个标准的,而不是交互式的项目时,我能够使用CsvProvider。任何帮助使其在交互式会话中高度赞赏。

+0

这很奇怪 - 您运行的是哪个版本的F#? – 2014-12-07 01:33:23

+0

我正在运行'F#Interactive版本12.0.30110.0'。而F#是3.0。我正在使用Visual Studio 2013社区版。 – PiotrWolkowski 2014-12-07 02:09:19

+0

你试过双反斜杠:CsvProvider <“C:\\ Users \\ pw \\ Downloads \\ msft.csv”>? – Alexan 2014-12-07 19:36:11

回答

2

关于文件被锁定的警告看起来令人担忧。您可以在某处复制FSharp.Data并使用绝对路径引用它:

\#r @"C:\Poligon\packages\FSharp.Data.2.1.0\lib\net40\FSharp.Data.dll";; 
+0

我尝试了两件事:1)我将'dll'复制到一个中性目录,然后通过绝对路径引用它。 2)我还在控制台中添加了一个由NuGet管理器安装dll的目录(使用'#I'指令),然后从那里引用它。在这两种情况下,都会导致'F#Interactive process'锁定文件的警告。针说我仍然无法访问控制台中的'CsvProvider'。 – PiotrWolkowski 2014-12-07 13:47:35

+0

远射,但你可以使用Process Explorer来查看该文件上的锁吗?如果什么都没有,那么你可以使用进程监视器来监视fsi运行时访问该文件的哪些进程(防病毒可能?) – MichalMa 2014-12-07 14:09:17

+0

当你在交互式引用dll时,你总是会得到这个锁定消息,这是正常的,这只是意味着你可以'修改项目,生成此dll。 – Alexan 2014-12-07 16:05:01