F# CsvProvider error”的含义;字典中不存在给定的密钥;当尝试加载示例文件时?
我无法使用fslab提供的FSharp.Data csv提供程序加载csv文件,包括示例adwords.csv文件 下面的错误是什么意思?另外,当我在VisualStudio编辑器中将鼠标悬停在代码上时,它会提到“字典中不存在给定的键” 问题示例: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
#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位于正确的位置。