从针对.NET Core的F#库中使用NuGet包时编译器错误

bug*_*d87 12 f# compiler-errors nuget .net-core

在从F#库项目中定位.NET Core时,我在某些NuGet包(例如Newtonsoft.Json和Microsoft.EntityFrameworkCore.SqlServer)中打开命名空间时遇到了一些麻烦.

以下是导致我的问题的步骤:

  1. https://www.microsoft.com/net/core#windows安装"Visual Studio 2015 Update 3"和".NET Core 1.0.1 - VS 2015 Tooling Preview 2"

  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
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在解决方案目录中创建一个空项目目录

  4. 在空项目目录中,运行命令:

    dotnet new -t lib --lang f#
    
    Run Code Online (Sandbox Code Playgroud)

    它创建了一个Library.fs文件:

    namespace Library
    
    module Say =
        let hello name =
            printfn "Hello %s" name
    
    Run Code Online (Sandbox Code Playgroud)

    和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"
          }
        }
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  5. 将此现有项目添加到我的解决方案中,并且包还原工作正常

  6. 但是,NuGet Package Manager UI无法打开,因为

    "dotnet-compile-fsc":"1.0.0-preview2-*"
    
    Run Code Online (Sandbox Code Playgroud)

    来自project.json文件"不是有效的版本字符串"

  7. 跑完命令

    dotnet -version
    
    Run Code Online (Sandbox Code Playgroud)

    并用实际版本"1.0.0-preview2-003131"替换"无效版本"

  8. 然后,NuGet Package Manager UI正确打开并显示以下已安装的软件包:

    • dotnet-compile-fsc v1.0.0-preview2-003131
    • Microsoft.FSharp.Core.netcore v1.0.0-alpha-160629
    • NETStandard.Library v1.6.0
  9. 安装了Newtonsoft.Json v9.0.1软件包,它将以下内容添加到project.json文件的根目录:

    "dependencies": {
        "Newtonsoft.Json": "9.0.1"
    }
    
    Run Code Online (Sandbox Code Playgroud)
  10. 在Library.fs文件中添加了以下行:

    open System
    open Newtonsoft.Json
    
    Run Code Online (Sandbox Code Playgroud)

    但编译器给我错误"命名空间或模块'Newtonsoft'未定义"

  11. 使用Visual Studio 2015中创建Class1.cs文件的模板在同一解决方案中创建了一个新的Visual C#.NET核类库项目:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace example2
    {
        public class Class1
        {
            public Class1()
            {
            }
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    和project.json文件:

    {
      "version": "1.0.0-*",
    
      "dependencies": {
        "NETStandard.Library": "1.6.0"
      },
    
      "frameworks": {
        "netstandard1.6": {
          "imports": "dnxcore50"
        }
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  12. 将Newtonsoft.Json v9.0.1软件包安装到C#项目中,该项目更新了project.json文件中的依赖项:

    "dependencies": {
        "NETStandard.Library": "1.6.0",
        "Newtonsoft.Json": "9.0.1"
    }
    
    Run Code Online (Sandbox Code Playgroud)
  13. 将以下行添加到Class1.cs文件中:

    using Newtonsoft.Json;
    
    Run Code Online (Sandbox Code Playgroud)

    并且没有编译器问题


我对Microsoft.EntityFrameworkCore.SqlServer NuGet包有同样的问题.

任何人都可以解释我在F#项目中做错了什么阻止我使用这些包?