IntelliSense в .fsx и динамически загружаемых сборках - PullRequest
6 голосов
/ 21 сентября 2011

При динамическом обращении к сборкам в .fsx с использованием #I и #r, VS выделяет следующие случаи использования импортируемых типов и пишет «Пространство имен или модуль« XXX »не определен».Это нормально?

Например, в следующем коде

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

open Fake

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

Run "Hello"

VS выделяет Fake и говорит "Пространство имен или модуль 'Fake' не определен", также выделяются Target и Run.У меня есть эта проблема в 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 ]

5 голосов
/ 21 сентября 2011

Если вы введете полный путь в директиву #r, вы получите полный IntelliSense. Директива #I, хотя и удобна, не позволяет IntelliSense работать должным образом, хотя код будет работать нормально. Это верно как для свободных скриптов, так и для тех, что встречаются в проектах. Посмотрите на [Томас Петричек [FSharp.AsyncExtensions] (http://github.com/tpetricek/FSharp.AsyncExtensions] проект.

1 голос
/ 21 сентября 2011

Нет, это не так.Ваш код работает?Intellisense предоставляется для сборок, на которые ссылаются с помощью #r.

...