使用#I
和#r
动态引用.fsx中的程序集时,VS会突出显示导入类型的以下用法并写入“未定义名称空间或模块'XXX'”。好吗?
例如,在以下代码中
#I @".\Tools\FAKE"
#r "FakeLib.dll"
open Fake
Target "Hello" (fun _ -> trace "hello!")
Run "Hello"
VS高亮显示Fake
并说“未定义名称空间或模块'假'',它还突出显示Target
和Run
。我在VS 2010 SP1和VS 11 CTP中遇到此问题。这个问题使得编写F#脚本的任务比它更难。
顺便说一句,“常见”类型的IntelliSence运行良好。 FakeLib.dll
目录中存在FakeLib.xml
和.\Tools\FAKE
。代码运行良好。
更新1
这是情况的截图。您可以看到VS正确解析程序集FakeLib
(在工具提示中),同时Intellisense“看到”标准类型(工具提示超过Console
)类。
更新2
我认为我的工作站上的IntelliSense有问题,因为它(IntelliSense)表现得非常奇怪。当我启动VS并打开.fsx文件时,IntelliSense甚至拒绝解析标准类型/类,并且它不会强调FAKE
类,它什么都不做。但经过一段时间后,对代码进行了一些操作,IntelliSense开始为标准类型工作并强调FAKE
类型。
此外,当我在家庭工作站上创建类似代码时没有任何问题,IntelliSense可以正常工作。
答案 0 :(得分:5)
如果您将完整路径放入#r指令,您将获得完整的IntelliSense。尽管代码运行得很好,但#I指令虽然方便,但会阻止IntelliSense正常工作。松散的脚本和项目中的脚本都是如此。看看Tomas Petricek的[FSharp.AsyncExtensions](http://github.com/tpetricek/FSharp.AsyncExtensions]项目。
答案 1 :(得分:1)
不,这不是它的工作原理。你的代码运行了吗?为使用#r
引用的程序集提供了Intellisense。