Lo spazio dei nomi dichiarato F # non è disponibile nel progetto c # o visibile attraverso il browser degli oggetti

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

  •  03-07-2019
  •  | 
  •  

Domanda

Lo spazio dei nomi dichiarato F # non è disponibile nel progetto c # o visibile attraverso il browser degli oggetti.

Ho creato un normale progetto di libreria F #, ma anche dopo aver creato il progetto e averlo fatto riferimento al mio progetto C #, non riesco ad accedere allo spazio dei nomi desiderato.

Inoltre, non riesco a vederlo nel browser degli oggetti, viene visualizzato un errore che indica che non è stato creato. Sono in esecuzione sulla versione di settembre qualcuno può segnalare il mio errore?

F # Versione 1.9.6.0

(6) Modifica: fare riferimento alla dll ha risolto direttamente il mio problema, fare riferimento al progetto mi permette di compilare ma l'intelligenza non funziona. Quando si fa riferimento direttamente alla DLL, l'intelligenza funziona perfettamente.


Questo è il codice trovato nel file .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) Modifica: ReSharper 4.0 potrebbe essere il problema?

(4) Modifica: quando dico che il browser degli oggetti non è in grado di leggere l'assembly risultante, intendo che quando provo ad aprire l'assemblaggio nel browser degli oggetti viene visualizzato un errore che mi informa che il progetto non è stato ancora creato. ancora una volta posso leggere l'assemblaggio usando il riflettore.

(3) Modifica: Reflector può disassemblare la dll ma il browser degli oggetti non è in grado di leggerlo.

(2) Modifica: ho aggiornato la mia versione F # alla 1.9.6.2 e comunque la stessa conseguenza

(1) Modifica: sono stato in grado di smontare la DLL in C # ottengo: (Qui tutto sembra andare bene)

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);
    }
}
È stato utile?

Soluzione

Cosa succede se si fa riferimento direttamente alla DLL prodotta (ovvero, non tramite un riferimento al progetto, ma tramite un riferimento al file)?

Altri suggerimenti

Forse IntelliSense è appena incasinato? Quale errore del compilatore viene visualizzato quando si tenta di utilizzarlo in C #? Quando dici " il browser degli oggetti non è in grado di leggerlo " cosa significa?

Per quello che vale, l'ho aggiunto a un progetto di libreria F #, l'ho fatto riferimento (progetto) da un'app console C # e sono stato in grado di usarlo. IntelliSense all'inizio non ha funzionato. (Ho dovuto ricostruire.)

Se riesci a creare una solida riproduzione, ti suggerirei di inviarla via email all'alias di bug F # (fsbugs).

Ho provato la stessa cosa. Sembra che Visual Studio e Resharper 4.0 non capiscano F # per qualche motivo. Se ignori il mare di testo rosso e la mancanza di intellisenso, andrà bene.

Prova

  1. Assicurarsi che il progetto C # sia mirato a FULL .NET (NON profilo client).

  2. Aggiungi riferimenti agli assiemi nel progetto C # che sono utilizzati dal progetto F #.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top