Поддержка взаимодействия C# - F# в Visual Studio 2015 в.NET Core
Примечание: здесь я говорю о ядре dotnet, а не о полном фреймворке! Для полной структуры есть много документов по этому вопросу, но это ядро dotnet.
У меня есть библиотека F#, созданная
dotnet new --lang F#
И приложение ASP.NET Core RC2 C# (созданное File->New Project в VS).
Теперь я использую свою библиотеку F# из C# (я думаю, очень распространенный сценарий...). На проект F# ссылаются в project.json как на любую другую библиотеку.net (перечисляя ее под зависимостями).
Теперь все это компилируется и работает отлично, и это здорово!
Единственная проблема заключается в том, что VS, кажется, не поддерживает его. Там нет intellisense и строки, где я использую функции F# из C#, помечены как ошибки. Отладка из C# в F# тоже не работает. Я попробовал это на Mac с VS Code, там же...
Когда я нажимаю на compile, компиляторы понимают это, и все в порядке.
Этот снимок экрана суммирует это (здесь я вызываю функцию F# из C#):
Так что в основном я получил решение VS с кучей ошибок, которые все еще компилируются.
Вот простой репродуктор.
Вопросы:
- Должны ли IntelliSense и отладка работать в VS вообще?
- Если да, что я сделал не так?
- Если нет, планируется ли охватить этот сценарий в будущем?
Вот код из репродуктора:
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# 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"
}
}
}
Спасибо
1 ответ
Поэтому в настоящее время я описал всю поддержку Visual Studio 2015 с инструментами предварительного просмотра. Будем надеяться, что Visual Studio 15 будет лучше, но текущий Preview (Preview 5) вообще не поддерживает.NET Core.
Что стоит попробовать, так это Visual Studio Code. В F# вы получаете intellisense для типа, определенного в C#. Таким образом, для взаимодействия F#-C# в настоящее время VS Code имеет гораздо лучшую поддержку, чем полная VS.