4

サンプルの adwords.csv ファイルを含め、fslab が提供する FSharp.Data csv プロバイダーを使用して csv ファイルを読み込めません。

以下のこのエラーはどういう意味ですか? また、Visual Studio エディターでコードにカーソルを合わせると、「指定されたキーが辞書に存在しませんでした」と表示されます。

問題の例:

#load "packages/FsLab/FsLab.fsx"

open System.IO
open FSharp.Data

"adwords.csv"
|> File.ReadAllLines

let test = CsvProvider<"adwords.csv">.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

私は自分のファイルでこの問題に遭遇したので、ここからこのサンプル ファイルを取得しました: https://raw.githubusercontent.com/fsharp/FSharp.Data/master/tests/FSharp.Data.Tests/Data/Adwords.csv

デバッグ情報:

  • FSharp.Data ライブラリ フォルダー (v 2.3.0) を削除し、バージョン 2.2.5 に置き換えると、エラーなく正常に動作します。
  • FsLab.fsx スクリプトを使用せず、代わりに使用する場合

    #I "packages/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 Community エディション 14.0.24720.00 Update 1 を使用しています。
  • .NET バージョン 4.6.01038
  • 以前にこれを使用したときと同じように、.dll を許可するかどうかを尋ねるポップアップが表示されないことに気付きました。
4

2 に答える 2

1

ファイルに問題はありません。これは例えば動作します:

#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

FsLab の FSharp.Data インストールまたは型プロバイダーのセキュリティに問題がある可能性があります。以下を試して、ファイルへのパスを直接指定してください。それでも機能しない場合は、FSharp.Data を nuget し、新しいプロジェクトで csv タイプ プロバイダーを直接使用してみてください。

その他の情報も助かります。VS のバージョン、FSLab のバージョン、他に参考にしたものはありますか。等

編集:デバッグ情報をありがとう。それは実際にはかなり役に立ちます。VS2015 Update 1 では、Fsharp のバインディング リダイレクトと型プロバイダー (FSharp ツールだった可能性がありますが、忘れていました) の 2 つが壊れていました。FSharp.Data.TypeProviders.dllUpdate 2 にアップグレードします。それが不可能な場合は、が にあるかどうかを確認してくださいC:\Program Files (x86)\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.0.0\Type Providers

dll を直接参照すると機能するため、おそらくバージョンの不一致の問題です。私の FsLab のインストールは VS2015 Update 1 および 2 より前のものであるため、新しいダウンロードで動作が異なるかどうかを確認します。

于 2016-06-11T00:43:27.363 に答える