#compiler-errors #f# #nuget #.net-core
#ошибки компилятора #f# #nuget #.net-core
Вопрос:
У меня возникли некоторые проблемы с открытием пространств имен в некоторых пакетах NuGet (например, Newtonsoft.Json и Microsoft.EntityFrameworkCore.SQLServer) при использовании .NET Core из проекта библиотеки F #.
Вот шаги, ведущие к моей проблеме:
-
Установлены «Visual Studio 2015 Update 3» и «.NET Core 1.0.1 — VS 2015 Tooling Preview 2» из https://www.microsoft.com/net/core#windows
-
Создано пустое решение со следующим содержимым:
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
-
Создан пустой каталог проекта в каталоге решения
-
В пустом каталоге проекта выполнил команду:
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" } } } }
-
Добавил этот существующий проект в мое решение, и восстановление пакета работало нормально
-
Однако не удалось открыть пользовательский интерфейс диспетчера пакетов NuGet, поскольку
"dotnet-compile-fsc":"1.0.0-preview2-*"
в файле project.json была «недопустимая строка версии»
-
Выполнил команду
dotnet -version
и заменил «недопустимую версию» на фактическую версию «1.0.0-preview2-003131»
-
Затем пользовательский интерфейс NuGet Package Manager открылся правильно и отобразил следующие установленные пакеты:
- dotnet-compile-fsc v1.0.0-preview2-003131
- Майкрософт.FSharp.Core.netcore v1.0.0-alpha-160629
- NETStandard.Библиотека версии v1.6.0
-
Установлен пакет Newtonsoft.Json v9.0.1, который добавил следующее в корень файла project.json:
"dependencies": { "Newtonsoft.Json": "9.0.1" }
-
Добавлены следующие строки в файл Library.fs:
open System open Newtonsoft.Json
но компилятор выдает мне сообщение об ошибке «Пространство имен или модуль ‘Newtonsoft’ не определены»
-
Создал новый проект библиотеки классов 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" } } }
-
Установлен пакет Newtonsoft.Json версии 9.0.1 для проекта C #, который обновил зависимости в файле project.json:
"dependencies": { "NETStandard.Library": "1.6.0", "Newtonsoft.Json": "9.0.1" }
-
Добавлена следующая строка в файл 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)