C# - Visual Studio 2015 对 .NET Core 的 F# Interop 支持

C# - F# Interop support in Visual Studio 2015 on .NET Core

注意:这里我说的是dotnet core而不是full framework!对于完整的框架,有很多文档,但这是 dotnet 核心。

我有一个由

创建的 F# 库
dotnet new --lang F#

还有一个 ASP.NET Core RC2 C# 应用程序(在 VS 中通过文件->新建项目创建)。

现在我使用来自 C# 的 F# 库(我想这是一个很常见的场景……)。 F# 项目在 project.json 中被引用为任何其他 .net 库(通过将其列在依赖项下)

现在所有这些都可以编译并正常工作,太棒了!

唯一的问题就是VS好像不支持。没有智能感知和线条,我在其中使用 C# 中的 F# 函数被标记为错误。从 C# 调试到 F# 也不起作用。我在 Mac 上用 VS Code 试过了,同样……

当我点击编译时,编译器解决了这个问题,一切都很好。

此屏幕截图对其进行了总结(这是我从 C# 调用 F# 函数的地方):

所以基本上我最终得到了带有一堆错误的 VS 解决方案,它仍然可以编译。

Here 是一个简单的复制器。

问题:

  1. 智能感知和调试是否应该在 VS 中工作?
  2. 如果是,我做错了什么?
  3. 如果否,此方案是否计划包含在 未来?

这是复制者的代码:

F# 库 - project.json(由 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#库,代码:

namespace FSharpLibrary

module Sample =

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

C# 应用程序(这里我使用控制台应用程序,但与 asp.net 核心相同)

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# 控制台应用程序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"
    }
  }
}

谢谢

目前我上面描述的是您在 Visual Studio 2015 年使用预览工具获得的所有支持。 Visual Studio 希望 15 会更好,但当前的预览版(预览版 5)does not have .NET Core support at all

值得一试的是Visual Studio代码。在 F# 中,您可以获得在 C# 中定义的类型的智能感知。所以对于 F#-C# 的互操作性,目前 VS Code 比完整的 VS 有更好的支持。