Ошибки компилятора при использовании пакетов NuGet из библиотеки F #, предназначенной для .NET Core

#compiler-errors #f# #nuget #.net-core

#ошибки компилятора #f# #nuget #.net-core

Вопрос:

У меня возникли некоторые проблемы с открытием пространств имен в некоторых пакетах NuGet (например, Newtonsoft.Json и Microsoft.EntityFrameworkCore.SQLServer) при использовании .NET Core из проекта библиотеки F #.

Вот шаги, ведущие к моей проблеме:

  1. Установлены «Visual Studio 2015 Update 3» и «.NET Core 1.0.1 — VS 2015 Tooling Preview 2» из https://www.microsoft.com/net/core#windows

  2. Создано пустое решение со следующим содержимым:

     Microsoft Visual Studio Solution File, Format Version 12.00  
    # Visual Studio 14
    VisualStudioVersion = 14.0.25420.1  
    MinimumVisualStudioVersion = 10.0.40219.1  
    Global  
        GlobalSection(SolutionProperties) = preSolution  
            HideSolutionNode = FALSE  
        EndGlobalSection  
    EndGlobal
      
  3. Создан пустой каталог проекта в каталоге решения

  4. В пустом каталоге проекта выполнил команду:

     dotnet new -t lib --lang f#
      

    который создал файл Library.fs:

     namespace Library
    
    module Say =
        let hello name =
            printfn "Hello %s" name
      

    и файл project.json:

     {
      "version": "1.0.0-*",
      "buildOptions": {
        "debugType": "portable",
        "compilerName": "fsc",
        "compile": {
          "includeFiles": [
            "Library.fs"
          ]
        }
      },
      "tools": {
        "dotnet-compile-fsc":"1.0.0-preview2-*"
      },
      "frameworks": {
        "netstandard1.6": {
          "dependencies": {
            "NETStandard.Library":"1.6.0",
            "Microsoft.FSharp.Core.netcore": "1.0.0-alpha-160629"
          }
        }
      }
    }
      
  5. Добавил этот существующий проект в мое решение, и восстановление пакета работало нормально

  6. Однако не удалось открыть пользовательский интерфейс диспетчера пакетов NuGet, поскольку

     "dotnet-compile-fsc":"1.0.0-preview2-*"
      

    в файле project.json была «недопустимая строка версии»

  7. Выполнил команду

     dotnet -version
      

    и заменил «недопустимую версию» на фактическую версию «1.0.0-preview2-003131»

  8. Затем пользовательский интерфейс NuGet Package Manager открылся правильно и отобразил следующие установленные пакеты:

    • dotnet-compile-fsc v1.0.0-preview2-003131
    • Майкрософт.FSharp.Core.netcore v1.0.0-alpha-160629
    • NETStandard.Библиотека версии v1.6.0
  9. Установлен пакет Newtonsoft.Json v9.0.1, который добавил следующее в корень файла project.json:

     "dependencies": {
        "Newtonsoft.Json": "9.0.1"
    }
      
  10. Добавлены следующие строки в файл Library.fs:

     open System
    open Newtonsoft.Json
      

    но компилятор выдает мне сообщение об ошибке «Пространство имен или модуль ‘Newtonsoft’ не определены»

  11. Создал новый проект библиотеки классов Visual C # .NET Core в том же решении, используя шаблон в Visual Studio 2015, который создал файл Class1.cs:

     using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace example2
    {
        public class Class1
        {
            public Class1()
            {
            }
        }
    }
      

    и файл project.json:

     {
      "version": "1.0.0-*",
    
      "dependencies": {
        "NETStandard.Library": "1.6.0"
      },
    
      "frameworks": {
        "netstandard1.6": {
          "imports": "dnxcore50"
        }
      }
    }
      
  12. Установлен пакет Newtonsoft.Json версии 9.0.1 для проекта C #, который обновил зависимости в файле project.json:

     "dependencies": {
        "NETStandard.Library": "1.6.0",
        "Newtonsoft.Json": "9.0.1"
    }
      
  13. Добавлена следующая строка в файл Class1.cs:

     using Newtonsoft.Json;
      

    и проблем с компилятором не было


У меня такая же проблема с Microsoft.Пакет NuGet EntityFrameworkCore.SQLServer.

Кто-нибудь может объяснить, что я делаю неправильно в проекте F #, что мешает мне использовать эти пакеты?

Комментарии:

1. Вы пытались добавить ` «NETStandard. Библиотека»: «1.6.0» ` в раздел зависимостей project.json в F # project.

2. Да, я попробовал это и другие настройки, чтобы сделать его более похожим на C # project.json, но я не смог найти рабочую комбинацию.

3. Как вы добавили библиотеку F # в существующее решение? Насколько я знаю, команда .NET CLI dotnet new -t lib --lang f# не создает .fsproj файл или что-либо еще, что можно было бы добавить в решение в Visual Studio 2015.

4. @dustinmoris, я уже объяснял это в самом вопросе. Весь смысл этой команды CLI заключается в создании файла проекта (в данном случае: project.json), поэтому я не уверен, откуда вы получили свою информацию.

5. Ваша проблема очень запутанная. Вы смешиваете много терминов, которые имеют двойное значение, и неясно, что именно вы делаете. > «5) Добавил этот существующий проект в мое решение, и восстановление пакета работало нормально» Какой существующий проект? Недавно созданный проект F #? Как вы можете добавить project.json в файл .sln? Я думал, что у вас должен быть csproj или fsproj, чтобы добавить проект в решение, или, возможно, вы подразумеваете под решением что-то другое, чем решение .NET (.sln)