2011-09-21 45 views
6

當使用#I#r動態引用.fsx中的程序集時,VS突出顯示了以下導入類型的用法並寫入了「未定義名稱空間或模塊'XXX'」。可以嗎?.fsx和動態加載的程序集中的智能感知

例如,在下面的代碼

#I @".\Tools\FAKE" 
#r "FakeLib.dll" 

open Fake 

Target "Hello" (fun _ -> trace "hello!") 

Run "Hello" 

VS突出Fake並且說「的命名空間或模塊‘假’未定義」,它也突出TargetRun。我在VS 2010 SP1和VS 11 CTP中遇到了這個問題。這個問題使得編寫F#腳本比它可能更難一些。

順便說一句,IntelliSence爲「普通」類型的效果很好。 FakeLib.dllFakeLib.xml存在於.\Tools\FAKE目錄中。代碼運行良好。

更新1 下面是情況的截圖。你可以看到VS正確地解析了程序集FakeLib(在工具提示中),並且同時Intellisense「看到」了標準類型(工具提示超過Console)。

enter image description here

更新2 我覺得有些不對勁與智能感知我的工作的工作站上,因爲它(智能感知)的行爲本身很奇怪。當我啓動VS並打開.fsx文件時,IntelliSense甚至拒絕解析標準類型/類,並且它不會強調FAKE類,它什麼也不做。但經過一段時間和代碼的一些操作IntelliSense開始工作的標準類型,並強調FAKE類型。

而且,當我創建了類似的代碼,我家的工作站上沒有出現問題,智能感知的作品,因爲它應該。

+0

Ryan Riley的回答絕對正確。我不知道發生了什麼,但是'#I'肯定突破智能感知上我的兩個工作站上的問題,只要我刪除'#I'走 –

+0

同樣的事情在這裏;在VS 2010高級F#素文字文件,使用引用非系統DLL時智能感知不起作用#我與r組成的相對路徑。 –

回答

5

如果你把完整路徑的r組成的指令,你會得到完整的IntelliSense。 #I指令雖然方便,但是可以防止IntelliSense正常工作,儘管代碼運行得很好。鬆散腳本和項目中的腳本都是如此。看看Tomas Petricek的[FSharp.AsyncExtensions](http://github.com/tpetricek/FSharp.AsyncExtensions)項目。

+0

這是不正確的。在我的情況下,'#I'似乎可以正確解析,使用Intellisense工作。 – Daniel

+0

這很有趣。它在VS 2010 Pro或Ultimate中都不適合我。你在用哪個VS? – 2011-09-21 14:17:38

+0

2010 Ultimate SP1 – Daniel

1

不,這不是它是如何工作的。你的代碼是否運行?爲使用#r引用的程序集提供了Intellisense。

+0

是的,我的代碼運行完全。我已經更新了我的全.fsx文件的問題,當我把它加載到F#interractive,它執行好。 –

+0

我無法重現你的問題。您是否嘗試過重新啓動VS? – Daniel

+0

您是否嘗試過使用FAKE庫?我已重新啓動VS.警告消失了一段時間,但在此期間,IntelliSense完全無法工作。 ome時期(1-2分鐘)智能感知功能開啓,但FAKE構造上的警告也出現了。順便說一句,我已經創建了一個解決方案,並將.fsx作爲「解決方案項目」項目添加......沒有任何改變。 –