C# - .NET Core 上的 Visual Studio 2015 中的 F# 互操作支持
注意:這裡我說的是 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 解決方案,它仍然可以編譯。
這是一個簡單的複制器。
問題:
- 智能感知和調試是否應該在 VS 中工作?
- 如果是,我做錯了什麼?
- 如果否,是否計劃在未來涵蓋這種情況?
以下是複制者的程式碼:
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" numberC# 應用程序(這裡我使用控制台應用程序,但與 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 有更好的支持。
