L'espace de noms déclaré F # n'est pas disponible dans le projet c # ni visible via le navigateur d'objets.

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

  •  03-07-2019
  •  | 
  •  

Question

L'espace de noms déclaré F # n'est pas disponible dans le projet c # ni visible via le navigateur d'objets.

J'ai construit un projet de bibliothèque F # normal, mais même après l'avoir construit et l'avoir référencé à mon projet C #, je ne peux pas accéder à l'espace de nom souhaité.

Je ne parviens pas non plus à le voir dans le navigateur d'objets, un message d'erreur me dit que celui-ci n'a pas été construit. Je lance la version de septembre, est-ce que quelqu'un peut signaler mon erreur?

F # Version 1.9.6.0

(6) Edit: Référencer la dll directement a corrigé mon problème, référencer le projet me permet de compiler mais l'intellisence ne fonctionne pas. Lorsque la dll est directement référencée, l'intellisence fonctionne parfaitement.

Ceci est le code présent dans le fichier .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) Edit: ReSharper 4.0 est-il le problème?

(4) Edit: Quand je dis que le navigateur d'objet est incapable de lire l'assemblage obtenu, je veux dire que lorsque j'essaie d'ouvrir l'assembly dans le navigateur d'objet, une erreur m'indique que le projet n'a pas encore été construit. encore une fois, je peux lire l’ensemble en utilisant un réflecteur.

(3) Édition: le réflecteur peut désassembler la dll mais le navigateur d’objets ne parvient pas à la lire.

(2) Edit: j'ai mis à niveau ma version F # vers la version 1.9.6.2 et toujours la même conséquence

(1) Edit: J'ai réussi à démonter la DLL en C # Je reçois: (Tout semble aller pour le mieux ici)

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);
    }
}
Était-ce utile?

La solution

Et si vous référencez directement la DLL produite (c'est-à-dire, non pas via une référence de projet, mais via une référence de fichier)?

Autres conseils

Peut-être que IntelliSense est juste foiré? Quelle erreur de compilateur obtenez-vous lorsque vous essayez de l'utiliser en C #? Lorsque vous dites "le navigateur d’objets ne parvient pas à le lire" Qu'est-ce que ça veut dire?

Pour ce que ça vaut, j'ai ajouté ceci à un projet de bibliothèque F #, je l'ai référencé (projet) à partir d'une application console C # et j'ai pu l'utiliser. IntelliSense n'a pas fonctionné au début cependant. (A dû reconstruire.)

Si vous pouvez faire une repro solide, je vous suggérerais de l’envoyer par courrier électronique à F # bugs alias (fsbugs).

J'ai essayé la même chose. Il semble que Visual Studio et Resharper 4.0 ne comprennent pas F # pour une raison quelconque. Si vous ignorez la mer de texte rouge et le manque d’intellisense, la compilation se fera sans problème.

Essayez

  1. Assurez-vous que le projet C # est ciblé PLEIN .NET (PAS le profil client).

  2. Ajoutez des références aux assemblys dans le projet C # utilisés par le projet F #.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top