无法从FSharp.Data实例化任何F#类型提供程序

5

我在尝试重建CSV类型提供程序的最简单示例:

  • 我通过Visual Studio 2015创建一个默认针对F#4.0和.NET 4.5.2的库项目。
  • 我通过NuGet添加了FSharp.Data 2.2.5。

现在,我的项目中已经有一个错误和一个警告:

类型提供程序 'ProviderImplementation.JsonProvider' 报告了一个错误: 类型提供程序构造函数引发了异常: API限制: 程序集 'file:///c:\users\james foye\documents\visual studio 2015\Projects\CsvExample\packages\FSharp.Data.2.2.5\lib\net40\FSharp.Data.dll' 已经从不同的位置加载。它不能从同一应用程序域中的新位置加载。CsvExample c:\users\james foye\documents\visual studio 2015\Projects\CsvExample\CsvExample\Library1.fs 1

引用的程序集 'c:\users\james foye\documents\visual studio 2015\Projects\CsvExample\packages\FSharp.Data.2.2.5\lib\net40\FSharp.Data.dll' 具有程序集级别特性 'Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute',但找不到公共类型提供程序类 CsvExample c:\users\james foye\documents\visual studio 2015\Projects\CsvExample\CsvExample\Library1.fs 1

所有实例化提供程序的尝试都失败了,例如:

open FSharp.Data;;

let yahoo = CsvProvider<"sample.csv">;;

C:\Data\Ebooks\F#\Deep Dives\Source\Chap6\YahooProvider\stdin(4,13): 错误 FS0039: 未定义值或构造函数 'CsvProvider'

无论我如何调整路径(提供完整路径、更改FSI的工作目录等),都不起作用。


1
我猜测(因为我前几天遇到了这个问题),编译的项目具有不同版本的 F# 数据。 - John Palmer
针对第一个错误,请尝试重新启动Visual Studio。 - mpeac
确实,重启VS会使这些错误消失。 - Jim Foye
现在我看到 "let =" 是错误的,应该是 "type = "。现在它可以正常工作了。 - Jim Foye
我建议你把你所采取的步骤写下来,把它作为问题的答案发布,然后接受你的答案。(在你被允许接受自己的答案之前,可能需要等待两天时间)。这将使以后遇到这个问题的人更容易找出对你有效的解决方法。 - rmunn
在浏览了这个问题之后,我通过更新到 FSharp.Data 6.0.2 解决了一个类似的问题。虽然我不知道这是一个修复还是一种解决方法。 - Lyndon Gingerich
1个回答

1

我无法找到编译器错误的根本原因,似乎是Visual Studio、NuGet或其他工具链中的某个bug。但正如mpeac建议的那样,简单地重启VS就解决了问题。

一旦我这样做了,我需要将代码从声明let绑定更改为定义类型。我只是错误地输入了"let ="而不是"type ="。


我也是!我使用了let .. =而不是type .. = - Stephen Hosking

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接