route - C#- F#Soporte de interoperabilidad en Visual Studio 2015 en.NET Core
select asp-for asp-items (1)
Así que actualmente lo que describí anteriormente es todo el soporte que tienes en Visual Studio 2015 con la herramienta de vista previa. Visual Studio 15 será mejor, pero la Vista previa actual (Vista previa 5) no tiene soporte para .NET Core .
Lo que vale la pena probar es Visual Studio Code. En F # obtienes intellisense por tipo que están definidos en C #. Por lo tanto, para la interoperabilidad F # -C # actualmente, VS Code tiene un soporte mucho mejor que el VS completo.
Nota: ¡Aquí hablo del núcleo de dotnet y no del marco completo! Para obtener un 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 Archivo-> Nuevo proyecto en VS).
Ahora uso mi biblioteca F # desde C # (supongo que es un escenario muy común ...). El proyecto F # se referencia en el proyecto.json como cualquier otra biblioteca .net (listándolo en dependencias)
Ahora todo esto compila y funciona bien, ¡lo cual es genial!
El único problema es que VS no parece apoyarlo. 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 intenté en una Mac con código VS, lo mismo allí ...
Cuando llegué a compilar, los compiladores lo resuelven y todo está bien.
Esta captura de pantalla lo resume (aquí es donde llamo una función F # de C #):
Así que, básicamente, terminé con la solución VS con un montón de errores en ella, que aún compila.
Aquí hay un reproductor simple.
Preguntas:
- ¿Debería Intellisense y eliminar errores en VS?
- Si es así, ¿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 # library, 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 las mismas cosas 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();
}
}
}
C # console application 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