2013-05-02 104 views
10

有點F#初學者。我試圖通過首先在腳本(fsx)文件中輸入它來在交互式窗口中測試我的一些XmlTypeProvider代碼。該腳本文件將無法識別以下腳本無法識別FSharp.Data

open FSharp.Data // gives "The namespace or module 'FSharp' is not defined" 

一切都已經加入到參考,並.FS文件似乎沒有任何問題找到XmlTypeProvider參考,但由於某些原因,在同一項目中的腳本不。我甚至有代碼在.fs文件中工作。

我用nuget添加了FSharp.Data,所有東西似乎都正確添加。我在這裏錯過了什麼?

+1

http://stackoverflow.com/questions/3102472/fc-fsx-script-files-and-project-references的FSX文件不使用項目引用(fsi也不使用)。您需要手動引用這些文件。看到這個帖子尋求幫助。 – mydogisbox 2013-05-02 17:12:43

+1

這裏有一個更徹底的寫作:http://blogs.msdn.com/b/chrsmith/archive/2008/09/12/scripting-in-f.aspx – mydogisbox 2013-05-02 18:07:48

+0

謝謝克里斯。我已經閱讀了幾篇你的文章,但不是那個! – user2344035 2013-05-02 18:35:57

回答

5

順便說一句,上週我只是在調試這個錯誤。基本上有三種可能的原因:

  • 無法找到文件。最明顯的一點是F#實際上找不到dll文件。確保引用是正確的(檢查項目屬性引用),或確保您#r指向正確的文件(使用F#腳本文件時)

  • 類型供應商不被信任。類型提供程序被Visual Studio阻止。如果您在第一次加載提供程序時單擊「禁用」,就會發生這種情況。要解決這個問題,請轉到「工具」 - 「選項」 - 「F#工具」 - 「類型提供程序」並啓用類型提供程序(選中「可信」)。

  • 該DLL被操作系統阻止。最後,如果dll來自不可信來源,則Windows可能會阻止它(這種情況尤其會在您下載zip文件並使用Windows解壓文件時發生)。要解鎖文件,請轉到文件屬性,然後點擊「取消阻止」。有一個good description here.

9

將腳本中的引用添加到包含FSharp.Data.dll的nuget packages文件夾中。該文件夾還包含了設計師的DLL(FSharp.Data.DesignTime.dll)

#r @"<your nuget packages folder>\FSharp.Data.2.1.0\lib\net40\FSharp.Data.dll" 
+0

把我扔掉的事情是,只要我開始輸入那個字符(即#r「」),VS就會給我扭曲的線條。它實際上是在設計時解析字符串。所以當我終於找到DLL時,那條波浪線消失了。 – mac10688 2015-12-21 19:01:06