Soporte de interoperabilidad C # - F # en Visual Studio 2015 en .NET Core
Nota: ¡aquí hablo de dotnet core y no full framework! Para el marco completo hay muchos documentos sobre esto, pero este es el núcleo de dotnet.
Tengo una biblioteca F # creada por
dotnet new --lang F#
Y una aplicación ASP.NET Core RC2 C # (creada por File-> New Project en VS).
Ahora uso mi biblioteca F # de C # (supongo que un escenario muy común ...). Se hace referencia al proyecto F # en project.json como cualquier otra biblioteca .net (enumerándolo bajo dependencias)
Ahora todo esto se compila y funciona bien, ¡lo cual es genial!
El único problema es que VS no parece admitirlo. No hay intellisense y las líneas, donde uso las funciones F # de C # están marcadas como error. La depuración de C # a F # tampoco funciona. Lo probé en una Mac con VS Code, lo mismo allí ...
Cuando presiono compilar, los compiladores se dan cuenta de esto y todo está bien.
Esta captura de pantalla lo resume (aquí es donde llamo una función F # desde C #):
Así que básicamente terminé con la solución VS con un montón de errores, que aún se compila.
aquí Es un simple reproductor.
Preguntas:
¿Intellisense y depuración deberían funcionar en VS?En caso afirmativo, ¿qué hice mal?Si no, ¿se planea cubrir este escenario en el futuro?Aquí está el código del reproductor:
F # library - project.json (creado por cli -dotnet new --lang F#
)
"version": "1.0.0-*",
"buildOptions": {
"compilerName": "fsc",
"compile": {
"includeFiles": [
"FSharpLibrary.fs"
]
}
},
"dependencies": {
"Microsoft.FSharp.Core.netcore": "1.0.0-alpha-160316",
"NETStandard.Library": "1.5.0-rc2-24027"
},
"tools": {
"dotnet-compile-fsc": {
"version": "1.0.0-*",
"imports": [
"dnxcore50",
"portable-net45+win81",
"netstandard1.3"
]
}
},
"frameworks": {
"netstandard1.5": {
"imports": [
"portable-net45+win8",
"dnxcore50"
]
}
}
F # biblioteca, el código:
namespace FSharpLibrary
module Sample =
let public FSharpFunction number =
printfn "Hello From F#, %d" number
Aplicación C # (aquí uso una aplicación de consola, pero lo mismo que con asp.net core)
using System;
namespace ConsoleAppCSharp
{
public class Program
{
public static void Main(string[] args)
{
FSharpLibrary.Sample.FSharpFunction(42); //<- This is red. and marked as error.
Console.ReadKey();
}
}
}
Aplicación de consola C # project.json
{
"version": "1.0.0-*",
"buildOptions": {
"emitEntryPoint": true
},
"dependencies": {
"LibraryFSharp": "1.0.0-*",
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.0-rc2-3002702"
}
},
"frameworks": {
"netcoreapp1.0": {
"imports": "dnxcore50"
}
}
}
Gracias