J'utilise des types F # (Matrix et al) de C# et je dois donc référencer l'assembly FSharp.Core dans mon projet C#. Jusqu'ici tout va bien.Y compris FSharp.Core dans un projet C#: résoudre les collisions de type
Cependant, il existe apparemment certains types définis dans mscorlib.dll (v4) qui sont "dupliqués" dans FSharp.Core (v2), comme System.Tuple
et System.IObservable
. Je ne comprends pas pourquoi cela est en .Net 4. Matt Ellis specifically said they would be removed in his MSDN article:
One language suffering that [duplication] problem was F#, which previously had defined its own tuple type in FSharp.Core.dll but will now use the tuple added in Microsoft .NET Framework 4.
Je suis prêt à regarder au-delà de cette double emploi particulier inconvenant si je pouvais préciser lequel je veux utiliser dans mon programme C#, mais . Lorsque je tente d'utiliser le type System.Tuple
, par exemple, je reçois le texte suivant C# erreur du compilateur:
Error 2 The type 'System.Tuple' exists in both 'c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\Profile\Client\mscorlib.dll' and 'c:\Program Files (x86)\Reference Assemblies\Microsoft\FSharp\2.0\Runtime\v2.0\FSharp.Core.dll'
La façon de contourner cela, apparemment, est a switch on the C# compiler command line which aliases the type:
csc.exe MyType.cs /reference:System.Tuple`2=mscorlib.dll /reference:FSharp.Core.dll
Cependant, je ne peux pas trouver un moyen d'obtenir Visual Studio pour envoyer ce paramètre au compilateur C#.
Quelqu'un at-il une solution à ce problème?
Notez que la version 4.0 réside dans 'c: \ Program Files (x86) \ Assemblys de référence \ Microsoft \ FSharp \ 2.0 \ Runtime \ v4.0 \ FSharp.Core.dll». Avez-vous utilisé 'ajouter une référence' pour obtenir la référence? Je me demande comment vous avez fini par référencer le 2.0 dans un projet 4.0 en premier lieu. – Brian
Oui, j'ai utilisé "Ajouter une référence" pour obtenir ceci ... cependant, j'ai le VS PowerTools avec la boîte de dialogue Ajouter une référence de meilleure conception installée, donc cela pourrait être le problème. – codekaizen
@Brian, grattez ça. Je dois y avoir navigué, et je n'ai tout simplement pas compris que F # v2.0 peut également cibler le CLRv2, et a donc deux ensembles d'assemblages différents. – codekaizen