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 を逆アセンブルできますが、Object Browser はそれを読み取ることができません。

(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

試す

  1. C# プロジェクトが完全な .NET (クライアント プロファイルではない) をターゲットにしていることを確認してください。

  2. F# プロジェクトで使用されるアセンブリへの参照を C# プロジェクトに追加します。

于 2010-11-10T09:22:17.667 に答える
1

同じことを試しました。Visual Studio と Resharper 4.0 は、何らかの理由で F# を理解していないようです。赤いテキストの海とインテリセンスの欠如を無視すれば、問題なくコンパイルできます。

于 2008-12-22T11:30:20.347 に答える
1

たぶん、IntelliSense が台無しになっているだけでしょうか? C# で使用しようとすると、どのようなコンパイラ エラーが発生しますか? 「オブジェクト ブラウザはそれを読み取ることができません」と言うとき、それはどういう意味ですか?

念のため、これを F# ライブラリ プロジェクトに追加し、C# コンソール アプリから参照 (プロジェクト) して、使用することができました。ただし、IntelliSense は最初は機能しませんでした。(再構築する必要がありました。)

確実な再現を作成できる場合は、F# バグ エイリアス (fsbugs) にメールで送信することをお勧めします。

于 2008-10-19T17:24:43.520 に答える