C # - F # Interop-Unterstützung in Visual Studio 2015 auf .NET Core

Hinweis: hier spreche ich von Dotnet Core und nicht von vollem Framework! Für ein vollständiges Framework gibt es viele Dokumente dazu, aber das ist der Dotnet-Core.

Ich habe eine F # -Bibliothek erstellt von

dotnet new --lang F#

Und eine ASP.NET Core RC2 C # -Anwendung (erstellt von File-> New Project in VS).

Jetzt benutze ich meine F # -Bibliothek aus C # (Ich denke, ein sehr häufiges Szenario ...). Das F # -Projekt wird in der project.json wie jede andere .net-Bibliothek referenziert (indem es unter Abhängigkeiten aufgelistet wird)

Nun kompiliert und funktioniert das alles gut, was großartig ist!

Das einzige Problem ist, dass VS es nicht zu unterstützen scheint. Es gibt keine Intellisense und Linien, in denen ich die F # -Funktionen von C # verwende, sind als Fehler markiert. Das Debuggen von C # nach F # funktioniert ebenfalls nicht. Ich habe es auf einem Mac mit VS Code ausprobiert, genau wie dort ...

Wenn ich auf compile klicke, finden die Compiler das heraus und alles ist in Ordnung.

Dieser Screenshot fasst es zusammen (hier rufe ich eine F # -Funktion von C # aus auf):

So im Grunde endete ich mit VS-Lösung mit einer Reihe von Fehlern, die immer noch kompiliert.

Hie ist ein einfacher Reproduzent.

Fragen

Sollte Intellisense und Debugging überhaupt in VS funktionieren?Wenn ja, was habe ich falsch gemacht?Wenn nein, ist dieses Szenario für die Zukunft geplant?

Hier ist der Code vom Wiedergabegerät:

F # library - project.json (erstellt von 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 # Bibliothek, der Code:

namespace FSharpLibrary

module Sample =

    let public FSharpFunction number = 
            printfn "Hello From F#, %d" number

C # -Anwendung (hier verwende ich eine Konsolen-App, aber die gleichen Dinge wie mit 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 # -Konsolenanwendung 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"
    }
  }
}

Vielen Dan

Antworten auf die Frage(2)

Ihre Antwort auf die Frage