Dot-Net

C# - .NET Core 上的 Visual Studio 2015 中的 F# 互操作支持

  • November 13, 2016

注意:這裡我說的是 dotnet core,而不是完整的框架!對於完整的框架,有很多關於此的文件,但這是 dotnet 核心。

我有一個由創建的 F# 庫

dotnet new --lang F#

還有一個 ASP.NET Core RC2 C# 應用程序(由 VS 中的 File->New Project 創建)。

現在我使用 C# 中的 F# 庫(我猜這是一個非常常見的場景……)。F# 項目在 project.json 中與任何其他 .net 庫一樣引用(通過在依賴項下列出)

現在所有這些都可以編譯並且工作正常,這太棒了!

唯一的問題是VS似乎不支持它。沒有智能感知和行,我使用 C# 中的 F# 函式被標記為錯誤。從 C# 到 F# 的調試也不起作用。我在帶有 VS Code 的 Mac 上嘗試過,那裡也一樣……

當我點擊編譯時,編譯器會解決這個問題,一切都很好。

此螢幕截圖對其進行了總結(這是我從 C# 呼叫 F# 函式的地方): 在此處輸入圖像描述

所以基本上我最終得到了帶有一堆錯誤的 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 核心相同)

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 希望會更好,但目前的 Preview(Preview 5)根本不支持 .NET Core

值得一試的是 Visual Studio Code。在 F# 中,您可以獲得 C# 中定義的類型的智能感知。所以對於 F#-C# 的互操作性,目前 VS Code 比完整的 VS 有更好的支持。

引用自:https://stackoverflow.com/questions/37719061