Объявленное пространство имен F# недоступно в проекте C# и не отображается через браузер объектов.
Вопрос
Объявленное пространство имен 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#.Если вы проигнорируете море красного текста и отсутствие интеллектуального смысла, он скомпилируется нормально.
Пытаться
Убедитесь, что проект C# ориентирован на ПОЛНУЮ .NET (НЕ профиль клиента).
Добавьте в проект C# ссылки на сборки, которые используются проектом F#.