Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# CsvProvider error”的含义;字典中不存在给定的密钥;当尝试加载示例文件时?_F#_F# Data_Fslab - Fatal编程技术网

F# CsvProvider error”的含义;字典中不存在给定的密钥;当尝试加载示例文件时?

F# CsvProvider error”的含义;字典中不存在给定的密钥;当尝试加载示例文件时?,f#,f#-data,fslab,F#,F# Data,Fslab,我无法使用fslab提供的FSharp.Data csv提供程序加载csv文件,包括示例adwords.csv文件 下面的错误是什么意思?另外,当我在VisualStudio编辑器中将鼠标悬停在代码上时,它会提到“字典中不存在给定的键” 问题示例: #load "packages/FsLab/FsLab.fsx" open System.IO open FSharp.Data "adwords.csv" |> File.ReadAllLines let test = CsvProvi

我无法使用fslab提供的FSharp.Data csv提供程序加载csv文件,包括示例adwords.csv文件

下面的错误是什么意思?另外,当我在VisualStudio编辑器中将鼠标悬停在代码上时,它会提到“字典中不存在给定的键”

问题示例:

#load "packages/FsLab/FsLab.fsx"

open System.IO
open FSharp.Data

"adwords.csv"
|> File.ReadAllLines

let test = CsvProvider<"adwords.csv">.GetSample()
#加载“packages/FsLab/FsLab.fsx”
开放系统
打开FSharp.Data
“adwords.csv”
|>File.ReadAllLines
let test=CsvProvider.GetSample()
输出:

>
val it : string [] =
 [|"Criteria ID,Name,Canonical Name,Parent ID,Country Code,Target Type,Status";
    "1000010,Abu Dhabi,"Abu Dhabi,Abu Dhabi,United Arab Emirates",9041082,AE,City,Active";
"1000011,Ajman,"Ajman,Ajman,United Arab Emirates",9047096,AE,City,Active";
"1000012,Al Ain,"Al Ain,Abu Dhabi,United Arab Emirates",9041082,AE,City,Active";
"1000013,Dubai,"Dubai,Dubai,United Arab Emirates",9041083,AE,City,Active";
"2004,Afghanistan,Afghanistan,,AF,Country,Active"|]
>
>System.MethodAccessException: Attempt by method '<StartupCode$FSI_0007>.$FSI_0007.main@()' to access method 'FSharp.Data.Runtime.CsvFile`1<System.__Canon>.Create(System.Func`3<System.Object,System.String[],System.__Canon>,
at <StartupCode$FSI_0007>.$FSI_0007.main@() in C:\test.fsx:line 11
Stopped due to error
>
val it:string[]=
[|“标准ID、名称、规范名称、父ID、国家代码、目标类型、状态”;
“1000010,阿布扎比”,“阿布扎比,阿布扎比,阿拉伯联合酋长国”,9041082,AE,城市,活动”;
“1000011,Ajman,“Ajman,Ajman,阿拉伯联合酋长国”,9047096,AE,城市,活动”;
“1000012,艾因”,“艾因,阿布扎比,阿拉伯联合酋长国”,9041082,AE,城市,活动”;
“1000013,迪拜,“迪拜,迪拜,阿拉伯联合酋长国”,9041083,AE,城市,活动”;
“2004年,阿富汗,阿富汗,空军,国家,现役”|]
>
>System.MethodAccessException:方法“%$FSI_0007.main@()”尝试访问方法“FSharp.Data.Runtime.CsvFile`1.Create(System.Func`3,
在C:\test.fsx中的.FSI_0007.main@()处:第11行
由于错误而停止
我自己的文件遇到了这个问题,所以我从这里抓取了这个示例文件:

调试信息:
  • 如果我删除FSharp.datalibrary文件夹(v2.3.0)并替换为版本2.2.5,它将正常工作,没有错误
  • 如果我不使用FsLab.fsx脚本,而是使用

    #I”包/FSharp.Data/lib/net40
    #r“FSharp.Data.dll”
    
    然后一切都开始了

  • FsLab.fsx脚本的路径是正确的,它在我将该行发送给fsi时运行
  • F#版本是14.0.23413.0
  • FSlab下载的FSharp.Data版本为FSharp.Data.2.3.0
  • 我在.fsx脚本中没有其他引用
  • 我正在使用Visual Studio社区版14.0.24720.00更新1
  • .NET版本4.6.01038
  • 我现在意识到,我没有得到弹出询问我是否希望允许.dll,就像我以前使用它时所得到的那样

文件没有问题。例如:

#load @"..\..\FSLAB\packages\FsLab\FsLab.fsx"

open System.IO
open FSharp.Data

[<Literal>]
let csvFile = @"C:\tmp\adwords.csv"
File.Exists csvFile

type Csv = CsvProvider<csvFile>
let csv = Csv.Load(csvFile)
csv.Rows
\load@.\..\FSLAB\packages\FSLAB\FSLAB.fsx
开放系统
打开FSharp.Data
[]
让csvFile=@“C:\tmp\adwords.csv”
存在csvFile
类型Csv=CsvProvider
让csv=csv.Load(csvFile)
csv.行
您的FSharp的FsLab有问题。可能是数据安装或类型提供程序安全性问题。请尝试以下操作,直接指定文件路径。如果仍然不起作用,请获取FSharp.Data并尝试在新项目中直接使用csv类型提供程序

其他信息也很有用。VS版本,FSLab版本,你有什么其他参考资料。等等

编辑:感谢您提供的调试信息。这实际上非常有用。VS2015更新1破坏了两件事,Fsharp的绑定重定向和类型提供程序(可能是Fsharp工具,我忘了).I将升级到更新2。如果不可能,请检查您的
FSharp.Data.TypeProviders.dll
是否位于
C:\Program Files(x86)\Reference Assembly\Microsoft\FSharp\.NETFramework\v4.0\4.3.0.0\Type Providers


由于直接引用DLL有效,这可能是版本不匹配的问题。我的FsLab安装早于VS2015更新1和2,因此将查看它在新下载时的行为是否有所不同。

FSharp的安装存在一些问题。目前与FsLab捆绑的数据(截至2016年6月)。此问题与版本2.3.0有关。如果改用FSharp.Data 2.2.5,代码将按预期工作


删除packages/FSharp.Data文件夹并替换为版本2.2.5。我从旧安装中执行了此操作,但您可以从Nuget执行此操作。是否尝试声明CSV内容的类型?
type MyRecords=CsvProvider
let test=MyRecords.GetSample()
是的。它给出了一个类似的错误。FSI似乎奇怪地显示了规范名称列。这可能是原因。阿富汗没有为父ID提供任何值。如果您将其放置在0中,是否有更好的方法?在我这方面没有解决。该文件是github存储库中的测试文件之一。重要的问题是FSharp.Data.2.2.5 vs.2.3.0.关闭这些可以修复我的问题。是的,我同意该文件很好(我选择它的原因)。我在问题的底部添加了一些调试信息。@nh2请在编辑中查看我的评论。我已将Visual Studio Community edition升级为Update 2。我仍然有相同的问题。我还确认typeProviders.dll位于正确的位置。