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

StackOverflow https://stackoverflow.com/questions/208008

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

F# версия 1.9.6.0

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


Это код, найденный в файле .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);
    }
}
Это было полезно?

Решение

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

Другие советы

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

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

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

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

Пытаться

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top