F#で宣言された名前空間は、c#プロジェクトで使用できないか、オブジェクトブラウザーから表示できません

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

  •  03-07-2019
  •  | 
  •  

質問

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);
    }
}
役に立ちましたか?

解決

生成されたDLLを直接参照した場合(つまり、プロジェクト参照ではなく、ファイル参照を介して)?

他のヒント

IntelliSenseが台無しになったのではないでしょうか? C#で使用しようとすると、どのコンパイラエラーが発生しますか? 「オブジェクトブラウザが読み込めない」と言うと、どういう意味ですか?

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

しっかりした再現ができる場合は、F#バグエイリアス(fsbugs)に電子メールで送信することをお勧めします。

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

試用

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top