Подтвердить что ты не робот

Поддержка С# - F # Interop в Visual Studio 2015 на .NET Core

Примечание: здесь я говорю о ядре dotnet, а не о полной структуре! Для полной структуры есть много документов по этому вопросу, но это ядро ​​dotnet.

У меня есть библиотека F #, созданная

dotnet new --lang F#

И приложение ASP.NET Core RC2 С# (созданное File- > New Project в VS).

Теперь я использую свою библиотеку F # из С# (я думаю, очень распространенный сценарий...). Проект F # ссылается в project.json как на любую другую .net-библиотеку (путем перечисления ее в зависимостях)

Теперь все это компилируется и прекрасно работает, и это здорово!

Единственная проблема заключается в том, что VS, похоже, не поддерживает его. Нет intellisense и линий, где я использую функции F # из С#, отмечены как ошибка. Отладка с С# на F # тоже не работает. Я попробовал это на Mac с VS Code, там же...

Когда я попал в компиляцию, компиляторы это выясняют, и все в порядке.

Этот снимок экрана суммирует его (здесь я вызываю функцию F # из С#): введите описание изображения здесь

Итак, в основном я закончил решение VS с кучей ошибок в нем, которое все еще компилируется.

Здесь - простой проигрыватель.

Вопросы:

  • Должны ли intellisense и отлаживать работу в 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

Приложение С# (здесь я использую консольное приложение, но то же самое, что и с ядром 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();
        }
    }
}

консольное приложение С# 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"
    }
  }
}

Спасибо

4b9b3361

Ответ 1

Итак, в настоящее время то, что я описал выше, - это все, что у вас есть в Visual Studio 2015 с помощью инструмента предварительного просмотра. Visual Studio 15, надеюсь, будет лучше, но текущий Preview (Preview 5) вообще не поддерживает .NET Core.

Что стоит попробовать - это Visual Studio Code. В F # вы получаете intellisense для типа, которые определены в С#. Таким образом, для взаимодействия F # -С# в настоящее время VS Code имеет гораздо лучшую поддержку, чем полный VS.