2017-12-04 5 views
2

FSharp.DataJsonProvider을 사용하여 JSON 파일에서 유형을 생성하는 라이브러리가 있습니다. 그러나 내가 콘솔 응용 프로그램에서이 프로젝트를 참조하고, 생성 된 유형에 액세스하려고 할 때, 그것은 컴파일되지 않지만,F # 유형 공급자가 프로젝트를 참조하지 않고 참조하는 프로젝트에서 샘플 파일을 찾습니다.

Cannot read sample JSON from 'sample.json': Could not find file 'C:\Some\Where\TheSolution\ConsoleApp\sample.json 

처럼 오류를 산출, 콘솔 응용 프로그램의 디렉토리에있는 샘플 파일을 찾습니다 나는 각각의 참조하는 프로젝트에 샘플 파일을 복사해야한다. 그렇지 않으면 이것을 DLL로 추가해야만이 작업을 할 수 있을까?

+1

코드를 표시해야합니다. –

+0

회사 코드이므로 허용되지 않지만 재현 할 단계가있는 Github 페이지에서 문제가 발생했습니다. https://github.com/fsharp/FSharp.Data/issues/1110 – rabejens

답변

2

라이브러리에서 F # 데이터 형식 공급자를 사용하고 라이브러리를 참조하면 컴파일러에서 예제에 액세스하려고합니다. 이는 형식이 지워지고 사용 될 때마다 다시 만들어지기 때문입니다. (그들은 또한 지연 생성되기 때문에 그들이 사용되는대로 즉석에서 생성되므로 유일한 옵션입니다.)

라이브러리를 사용하여 파일을 복사 할 수 있다면 가장 좋은 방법 일 수 있지만 우리는이 문제를 해결하려고 노력했습니다. 샘플을 리소스로 포함시키고 유형 공급자에게 먼저 리소스를 찾도록 지시 할 수 있습니다. 은 F # 데이터 문서에 Using JSON provider in a library를 참조하십시오

type WB = JsonProvider<"../data/WorldBank.json", 
    EmbeddedResource="MyLib, worldbank.json"> 

F# Data Toolbox 라이브러리, 예를 들어, 사용됩니다. 아아가 잘 작동하도록하는 것은 약간의 실수입니다.

+0

아, 저는 저것에 밖으로 빗나 갔다. 그러나 필자의 구체적인 예는 매우 간단하므로 형식 제공자가 필요하지 않지만 다음 번에 필요할 때이를 명심하십시오. 나는 또한 Github 페이지에 문제를 열었습니다. # 1110입니다. 그 내용을 개선 제안으로 남겨 두어야합니까, 아니면 닫아야합니까? – rabejens

+0

유스 케이스가 매우 단순한 경우 인라인 JSON을 샘플로 사용할 수도 있습니다. JSON이 너무 길지 않은 경우 잘 작동합니다. 문제와 관련하여 - 나는 그것을 닫고 여기에서 대답을 복사했습니다. 그래도보고 해 주셔서 감사합니다! –