Пространство имен, объявленное F #, недоступно в проекте c # или не отображается в браузере объектов - PullRequest
8 голосов
/ 16 октября 2008

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

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

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

F # Версия 1.9.6.0

(6) Редактировать: Ссылка на dll напрямую исправила мою проблему, ссылка на проект позволяет мне компилировать, но intellisence не работает. Когда на 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) Редактировать: Отражатель может дизассемблировать, но обозреватель объектов не может его прочитать.

(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);
    }
}

Ответы [ 4 ]

4 голосов
/ 17 октября 2008

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

1 голос
/ 10 ноября 2010

Попробуйте

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

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

1 голос
/ 22 декабря 2008

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

1 голос
/ 19 октября 2008

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

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

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

...