Объявленное пространство имен F # недоступно в проекте c # или не отображается в обозревателе объектов

Объявленное пространство имен F # недоступно в проекте C # и не отображается в обозревателе объектов.

Я создал обычный проект библиотеки F #, но даже после того, как я создаю проект и ссылаюсь на свой проект C #, я не могу получить доступ к желаемому пространству имен.

Я также не вижу его в обозревателе объектов, я получаю сообщение об ошибке, говорящее, что он не был построен. У меня сентябрьский выпуск. Может кто-нибудь указать на мою ошибку?

F # Версия 1.9.6.0

(6) Изменить: ссылка на DLL напрямую устранила мою проблему, ссылка на проект позволяет мне компилировать, но интеллект не работает. Когда dll ссылается напрямую, intellisence работает отлично.


Это код из файла .fs.

#light

namespace Soilsiu.Core 

module public Process =
    open System.Xml.Linq

    let private xname (tag:string) = XName.Get(tag)
    let private tagUrl (tag:XElement) = let attribute = tag.Attribute(xname "href")
                                        attribute.Value
    let Bookmarks(xmlFile:string) = 
        let xml = XDocument.Load(xmlFile)
        xml.Elements <| xname "A" |> Seq.map(tagUrl)

    let PrintBookmarks (xmlFile:string) =     
        let list = Bookmarks(xmlFile)
        list |> Seq.iter(fun u -> printfn "%s" u)

(5) Изменить: может ли проблема быть с ReSharper 4.0?

(4) Изменить: когда я говорю, что обозреватель объектов не может прочитать полученную сборку, я имею в виду, что когда я пытаюсь открыть сборку в обозревателе объектов, я получаю сообщение об ошибке, сообщающее мне, что проект еще не создан. И снова я могу прочитать сборку с помощью отражателя.

(3) Изменить: Reflector может дизассемблировать dll, но браузер объектов не может ее прочитать.

(2) Изменить: я обновил свою версию F # до 1.9.6.2 и все те же последствия

(1) Изменить: мне удалось разобрать dll на C #. Я получаю: (Кажется, здесь все в порядке)

namespace Soilsiu.Core
{
    [CompilationMapping(7)]
    public static class Crawler

    [CompilationMapping(7)]
    public static class Process
}

[CompilationMapping(7)]
public static class Process
{
    // Methods
    static Process();
    public static IEnumerable<string> Bookmarks(string xmlFile);
    public static void PrintBookmarks(string xmlFile);
    internal static string tagUrl(XElement tag);
    internal static XName xname(string tag);

    // Nested Types
    [Serializable]
    internal class clo@13 : FastFunc<XElement, string>
    {
        // Methods
        public clo@13();
        public override string Invoke(XElement tag@9);
    }

    [Serializable]
    internal class clo@17 : FastFunc<string, Unit>
    {
        // Methods
        public clo@17();
        public override Unit Invoke(string u);
    }
}

person Community    schedule 16.10.2008    source источник


Ответы (4)


Что, если вы напрямую ссылаетесь на созданную DLL (то есть не через ссылку на проект, а через ссылку на файл)?

person Community    schedule 17.10.2008

Может, IntelliSense просто напортачил? Какую ошибку компилятора вы получаете при попытке использовать его на C #? Когда вы говорите «обозреватель объекта не может его прочитать», что это значит?

Как бы то ни было, я добавил это в проект библиотеки F #, сослался на него (проект) из консольного приложения C # и смог его использовать. Однако сначала IntelliSense не работал. (Пришлось перестраивать.)

Если вы можете сделать надежную копию, я бы посоветовал отправить ее по электронной почте на псевдоним F # bugs (fsbugs).

person MichaelGG    schedule 19.10.2008
comment
вы пересобирали проект f # из проекта C #? - person Alexandre Brisebois; 20.10.2008
comment
Восстановил все. Исправлена ​​ли ссылка на файл (был отмечен ответ)? Это все равно будет ошибкой, и вам следует сообщить об этом. - person MichaelGG; 21.10.2008

Я пробовал то же самое. Похоже, что Visual Studio и Resharper 4.0 по какой-то причине не понимают F #. Если вы проигнорируете море красного текста и отсутствие интеллекта, он будет компилироваться нормально.

person Community    schedule 22.12.2008

Пытаться

  1. Убедитесь, что проект C # нацелен на ПОЛНЫЙ .NET (НЕ профиль клиента).

  2. Добавьте в проект C # ссылки на сборки, которые используются в проекте F #.

person Community    schedule 10.11.2010
comment
Это относится к F # и .Net 4.0, поскольку в Visual Studio 2008 у нас не было клиентских профилей. Или я могу ошибаться в этом .. - person Alexandre Brisebois; 14.11.2010