2010-02-08 12 views
1

Pardonnez-moi si la réponse semble évidente.Problème référençant une DLL # dans un projet C#

J'ai créé une solution Visual Studio et ajouté deux projets, une F # Library (appelée MathLibrary) et la seconde, une interface C# (appelée frontend, je suis consciente de ma créativité).

donc ajouter une référence à la DLL MathLibrary dans mon projet frontend, compilé la MathLibrary DLL (pour être sûr) et a tenté de l'utiliser dans mon projet frontend. À quel point mon compilateur s'est plaint que c'était une référence indéfinie. J'avais cru comprendre que l'ajout de la référence appropriée me permettrait d'accéder à ma DLL, mais il me manque clairement une étape importante.

Une aide?

+2

Où avez-vous obtenu la "référence non définie" et quel était le message d'erreur réel? Cela ressemble à un espace de noms manquant ou quelque chose ... – itowlson

+0

Lorsque j'essaie de référencer une classe ou une méthode en tant que DLL.Class, j'obtiens "le nom 'MathLibrary' n'existe pas dans le contexte actuel – tzenes

Répondre

1

Il n'y a pas realtionship entre un nom de fichier .fs, et les espaces de noms/modules qui y sont contenues ... sauf dans le cas où vous ne spécifiez pas complètement toutes les déclarations d'espace de noms ou d'un module; dans ce cas, la compilation suppose un module avec le même nom que le fichier. Bien que je sois heureux que vous ayez pu compiler, je ne pense pas que vous ayez trouvé le problème ou la solution.

0

Est-ce que cela peut apparaître comme Module1.SomeClass. Le fichier par défaut dans un projet de bibliothèque F # est appelé Module1, et si vous ne commencez pas le fichier de code source soit une déclaration namespace ou module, vous générer du code dans un module avec le même nom que le nom de fichier.

Vous pouvez ajouter namespace FsLib au début de votre code de bibliothèque F # qui définit une classe, puis voir si FsLib.SomeClass fonctionne en C#.

+0

Ok, j'ai essayé À ce stade, je me suis rendu compte que le fichier .fs avait un nom différent de l'espace de noms que j'utilisais pour ce jeu. Je ne sais pas pourquoi le fichier nécessite le même nom que l'espace de noms (car je pourrais avoir plusieurs fichiers dans le même espace de nom), mais c'est ce qui l'a fait compiler correctement – tzenes

+0

@tzenes, si vous avez trouvé la solution, pensez à l'ajouter comme réponse et à l'accepter – Benjol

+2

@tzones: il n'y a pas de lien entre un .fs le nom du fichier, et les espaces de noms/modules qu'il contient ... sauf dans le cas où vous omettez complètement les déclarations d'espace de noms ou de module, dans ce cas, la compilation suppose un module avec le même nom que le fichier. capable de compiler, je ne pense pas que vous avez atteint le problème/la solution. – pblasucci

0

La bibliothèque F # a-t-elle été créée avec succès? Pouvez-vous voir le fichier DLL et contient-il des classes et des espaces de noms si vous l'ouvrez en utilisant Reflector?

Dans tous les cas, vous devrez également ajouter une référence à FSharp.Core.dll (qui est une bibliothèque contenant des types F # de base tels que des listes, etc. et est référencée par n'importe quelle DLL produite par le compilateur F #). Cependant, je suppose que le message d'erreur que vous obtiendriez si vous deviez simplement ajouter cette référence serait différent.

Questions connexes