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

Dmi*_*nov 6 intellisense f# visual-studio f#-scripting

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

例如,在以下代码中

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

open Fake

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

Run "Hello"
Run Code Online (Sandbox Code Playgroud)

VS亮点Fake并说"命名空间或模块'假'未定义",它也突出显示Target和Run.我在VS 2010 SP1和VS 11 CTP中遇到此问题.这个问题使得编写F#脚本的任务比它更难.

顺便说一句,IntelliSence对于"常见"类型很有效.FakeLib.dll和FakeLib.xml存在于.\Tools\FAKE目录中.代码运行良好.

更新1 这是情况的屏幕截图.您可以看到VS FakeLib正确地解析了程序集(在工具提示中),同时Intellisense"看到"标准类型(tooltip over Console)类.

在此输入图像描述

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

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

小智 5

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