2012-11-18 6 views
6

모든 종속성이 같은 폴더에 있지 않으면 내 F # 유형 공급자가 작동하지 않는 것 같습니다. 이것은 nuget을 통해 유형 제공자를 배포하는 경우에는 잘 작동하지 않습니다. 이 문제를 해결하는 방법에 대한 제안 사항이 있으십니까?NuGet을 통해 F # 유형 제공자를 배포하려면 어떻게해야합니까?

거 야 얻을 같은 오류 : 오류 FS3033 : 유형 공급자 'Froto.Gen.ProtoTypeProvider이'오류가 발생했습니다 : 파일이나 어셈블리 'Froto.Roslyn, 버전 = 0.0.0.1를로드 할 수 없습니다, 중립 문화 = PublicKeyToken = null '또는 해당 종속 항목 중 하나. 시스템이 지정된 파일을 찾을 수 없습니다.

유형 제공자는이 라이브러리에 있습니다 패키지 \ Froto.Gen.0.0.0.1 \ lib 디렉토리 \ net45 \ Froto.Gen.dll

종속성이 프로젝트의 모든입니다. 모든 패키지를 \ Froto.Gen.0.0.0.1 \ lib \ net45 \에 복사하면 유형 공급자가 작동합니다.

2012-11-19 업데이트 : 문제를 더 잘 설명하기 위해 오늘 NuGet 패키지를 만들 계획입니다.

+0

"Froto.Roslyn"DLL은 자체 Nuget 패키지로 제공됩니까? 그렇지 않다면 어떻게 "Froto.Gen.ProtoTypeProvider"가 다운 된 클라이언트가 종속성에 액세스 할 수 있다고 가정하고 있습니까? 사용할 수없는 경우 작동하지 않습니다 (Nuget 패키지에 모든 종속성을 복사하면 효과가 있음). – Chris

답변

4

이 문제는 F #과 관련이 없습니다. 당신은 절대적으로

  • 는 NuGet은 패키지 할 수있는 필요한 참조를
  • nuget 패키지를 제공 할 것입니다 다른 패키지에 달려 있음을 알려 당신의 nuget 패키지의 일부로에 하나

    • 선박 필요한 모든 종속성이 여러 dll을 쉽게 포함 할 수 있습니다 (올바르게 패키지 된 경우). 당신은 여기에 패키지를 만드는 방법에 아부 더 읽을 수 있습니다 http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package

      당신은 문제가, 내가 다른 오픈 소스 프로젝트가 NuGet 패키지를 구축하는 데 사용하는 스크립트에서 보라는 권유를 msbuild 스크립트 프로젝트와 NuGet 통합이 있으시면 (예 : 검사 FSharpX 또는 FSharp 파워 팩).

    +0

    NuGet 패키지는 필요한 종속성을 참조합니다. 모든 종속성이 다운로드되고 프로젝트의 일부입니다. F # 특정 부분은 형식 공급자가 프로젝트에서 형식을로드하지 않고 같은 폴더 만로드한다는 것입니다. 프로젝트에서 종속성을 찾을 수 있기를 기대했습니다. 같은 폴더에 몇 가지 종속성을 포함시킬 수는 있지만 Roslyn과 같은 종속성을 포함 할 권한이 없다고 생각합니다. –

    +0

    @CameronTaggart : '프로젝트'가 의미하는 바를 실제로 얻지는 못했지만 MSBuild/VisualStudi에서 어셈블리 참조를 의미한다고 가정합니다.이 어셈블리 참조는 bin/폴더의 프로젝트 어셈블리 옆에 복사됩니다. F # 유형 공급자가 CLR의 어셈블리로드 규칙에서 벗어난 것을 상상할 수 없으므로 문제를 쉽게 해결할 수 있습니다. NuGet 패키지를 가르쳐 주시겠습니까? –

    +1

    위의 문장에서 실제로 틀릴 수도 있습니다. F # 유형 공급자에서 런타임 대신 컴파일 타임에 호출됩니다. 왜냐하면 런타임시 컴파일되는 System.Expression과 유사하게 작동 할 것이라고 예상했기 때문에 예상치 못한 결과가 발생했습니다. 사실 @ovatsus가 제안한 것을 해줘야 할 것 같습니다. –

    3

    FSharpx.TypeProviders에서 FSharpx.Core에 의존하는 유사한 문제가있었습니다. 해결책은 ILMerge를 사용하여 모든 종속성을 유형 공급자로 병합하는 것입니다. 스레드를 확인하십시오 https://github.com/fsharp/fsharpx/issues/91

    +0

    이 ilmerge를 msbuild 대상으로 추가하는 것이 유용할까요? 이 새로운 타겟은 너겟을 통해 기존 프로젝트에 추가 될 수 있습니다. – nicolas

    관련 문제