.fsx中的IntelliSense和动态加载的程序集

时间:2011-09-21 03:12:16

标签: visual-studio f# intellisense f#-scripting

使用#I#r动态引用.fsx中的程序集时,VS会突出显示导入类型的以下用法并写入“未定义名称空间或模块'XXX'”。好吗?

例如,在以下代码中

#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.dll目录中存在FakeLib.xml.\Tools\FAKE。代码运行良好。

更新1 这是情况的截图。您可以看到VS正确解析程序集FakeLib(在工具提示中),同时Intellisense“看到”标准类型(工具提示超过Console)类。

enter image description here

更新2 我认为我的工作站上的IntelliSense有问题,因为它(IntelliSense)表现得非常奇怪。当我启动VS并打开.fsx文件时,IntelliSense甚至拒绝解析标准类型/类,并且它不会强调FAKE类,它什么都不做。但经过一段时间后,对代码进行了一些操作,IntelliSense开始为标准类型工作并强调FAKE类型。

此外,当我在家庭工作站上创建类似代码时没有任何问题,IntelliSense可以正常工作。

2 个答案:

答案 0 :(得分:5)

如果您将完整路径放入#r指令,您将获得完整的IntelliSense。尽管代码运行得很好,但#I指令虽然方便,但会阻止IntelliSense正常工作。松散的脚本和项目中的脚本都是如此。看看Tomas Petricek的[FSharp.AsyncExtensions](http://github.com/tpetricek/FSharp.AsyncExtensions]项目。

答案 1 :(得分:1)

不,这不是它的工作原理。你的代码运行了吗?为使用#r引用的程序集提供了Intellisense。