8

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

4 回答 4

4

如果您直接引用生成的 DLL(即,不是通过项目引用,而是通过文件引用)会怎样?

于 2008-10-17T16:43:19.127 回答
1

也许 IntelliSense 只是搞砸了?当您尝试在 C# 中使用它时会遇到什么编译器错误?当您说“对象浏览器无法读取它”时,这是什么意思?

对于它的价值,我将它添加到 F# 库项目中,从 C# 控制台应用程序引用它(项目),并且能够使用它。IntelliSense 一开始并没有工作。(不得不重建。)

如果您可以进行可靠的复制,我建议将其通过电子邮件发送给 F# 错误别名 (fsbugs)。

于 2008-10-19T17:24:43.520 回答
1

我尝试了同样的事情。看起来 Visual Studio 和 Resharper 4.0 出于某种原因不理解 F#。如果你忽略红色文本的海洋和缺乏智能,它会编译得很好。

于 2008-12-22T11:30:20.347 回答
1

尝试

  1. 确保 C# 项目的目标是 FULL .NET(不是客户端配置文件)。

  2. 将对程序集的引用添加到 F# 项目使用的 C# 项目中。

于 2010-11-10T09:22:17.667 回答