F# 声明的命名空间在 c# 项目中不可用或通过对象浏览器可见。
我已经构建了一个普通的 F# 库项目,但即使在我构建项目并将其引用到我的 C# 项目之后,我也无法访问所需的命名空间。
我也无法在对象浏览器中看到它,我收到一条错误消息,告诉我它尚未构建。我正在运行 9 月版本,有人可以指出我的错误吗?
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);
}
}