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 是一个简单的复制器。
问题:
- 智能感知和调试是否应该在 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" 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 有更好的支持。
注意:这里我说的是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 是一个简单的复制器。
问题:
- 智能感知和调试是否应该在 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" 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 有更好的支持。