在.NET Core上,Visual Studio 2015支持C#和F#之间的互操作性。

15

注意:这里我谈论的是dotnet core而不是完整的框架!对于完整的框架,有很多文档可以参考,但是这是关于dotnet core的。

我有一个由F#创建的库

dotnet new --lang F#

这是一个ASP.NET Core RC2 C#应用程序(通过在VS中选择“文件”->“新建项目”创建)。

现在我从C#中使用我的F#库(我猜这是非常常见的场景...)。 F#项目被列为其他.NET库的依赖项,在project.json文件中引用它。

现在所有这些都可以编译并正常工作,这很好!唯一的问题是,VS似乎不支持它。没有智能感知,而且我从C#中使用F#函数的行会被标记为错误。从C#到F#的调试也不起作用。我在带有VS Code的Mac上尝试过,结果也相同...

当我点击编译时,编译器会解决这个问题,一切正常。

此截图总结了它(这是我从C#调用F#函数的地方):enter image description here

所以基本上我得到了一个有许多错误的VS解决方案,但仍然可以编译。

这里有一个简单的重现程序。

问题:

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

谢谢


我已经删除了我的回答,认为最好还是留下来,以防其他人想到与我相同的答案 - 这就是问答网站的全部意义,一个问题被提出,提供多个答案,无论是在上下文内还是外部。我已经为您找到了以下内容:https://github.com/Microsoft/visualfsharp/wiki/F%23-for-CoreCLR---Status目前似乎还不支持调试,而且在VS方面的支持也很差。 - Eon
@Krohn 我在问题中添加了说明,这不是完整的框架,所以我认为不会有新的答案。感谢您提供的Github页面。我已经看过了,那确实说明它不受支持,但是该页面上次更新是在1月27日,而ASP.NET Core的RC1/Preview1版本发布之前,因此我不确定它是否100%准确。 - gregkalapos
1
根据 Github 上的讨论,目前的情况是我在这里描述的,不支持智能感知和调试:https://github.com/dotnet/roslyn-project-system/issues/219 https://github.com/Microsoft/visualfsharp/issues/1193 https://github.com/Microsoft/visualfsharp/issues/496 - gregkalapos
据我所知,F#的.NET Core仍在开发中,它将与F# 4.1和Visual Studio 15一起发布。 - Stefano Balzarotti
1
@StefanoBalzarotti .NET Core 发布与 VS 发布和 F# 版本无关。当前,工具支持不是很好,但它能够正常使用。(顺便说一句,C# 和 F# 都处于预览阶段) VS Code 甚至在互操作情况下具有智能感知功能。但是,很有可能 VS15 将具有更好的支持。我想指出的是:今天已经可以在 .NET Core 上使用 F#,但存在一些缺点。 - gregkalapos
@gregkalapos 谢谢,我对使用F#和.NET Core非常感兴趣。我正在关注GitHub上的项目:https://github.com/Microsoft/visualfsharp/wiki/F%23-for-CoreCLR---Status,最新版本支持.NET Core,但仍在开发中,尚未发布稳定版本。据我所知,他们计划通过F# 4.1完全支持.NET Core,并且新版本遵循VS15的路线图。https://visualstudio.uservoice.com/forums/121579-visual-studio-ide/suggestions/7542181-add-f-support-for-net-native - Stefano Balzarotti
1个回答

2
目前,我在 Visual Studio 2015 预览工具中所描述的就是你所拥有的所有支持。Visual Studio 15 希望会更好,但是当前的预览版(预览版 5)根本没有 .NET Core 支持
值得尝试的是 Visual Studio Code。在 F# 中,你可以获得在 C# 中定义的类型的智能感知。因此,在 F#-C# 互操作性方面,目前 VS Code 比完整版的 VS 更好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接