2011-09-21 28 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作为“解决方案项目”项目添加......没有任何改变。 –