2014-12-07 59 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