繁体   English   中英

C# - 在.NET Core上的Visual Studio 2015中的F#Interop支持

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

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

我有一个F#库

dotnet new --lang F#

和一个ASP.NET Core RC2 C#应用程序(由VS中的File-> New Project创建)。

现在我使用来自C#的F#库(我猜这是一个非常常见的场景......)。 在Project.json中引用F#项目作为任何其他.net库(通过在依赖项下列出它)

现在所有这些编译和工作正常,这是伟大的!

唯一的问题是VS似乎不支持它。 没有intellisense和行,我使用C#中的F#函数标记为错误。 从C#到F#的调试也不起作用。 我在带有VS Code的Mac上尝试过,同样的......

当我点击编译时,编译器会想出来,一切都很好。

这个截图总结了它(这是我从C#调用F#函数的地方): 在此输入图像描述

所以基本上我最终得到了VS解决方案,其中包含一堆错误,仍然可以编译。

是一个简单的复制器。

问题:

  1. 应该智能感知和调试在VS中工作吗?
  2. 如果是的话,我做错了什么?
  3. 如果不是,这个方案是否计划在未来涵盖?

以下是重现器的代码:

F#library - 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#console应用程序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) 根本没有.NET Core支持

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM