6

我的 F# 类型提供程序似乎无法正常工作,除非它的所有依赖项都在同一个文件夹中。这不适用于通过 nuget 分发类型提供程序。关于如何解决这个问题的任何建议?

我会收到如下错误:错误 FS3033:类型提供程序“Froto.Gen.ProtoTypeProvider”报告错误:无法加载文件或程序集“Froto.Roslyn,版本=0.0.0.1,文化=中性,PublicKeyToken=null”或它的依赖项之一。该系统找不到指定的文件。

类型提供程序在此库中:packages\Froto.Gen.0.0.0.1\lib\net45\Froto.Gen.dll

依赖项都在项目中。如果我将它们全部复制到 packages\Froto.Gen.0.0.0.1\lib\net45\ 中,则类型提供程序有效。

2012-11-19 更新:我今天将创建一个 NuGet 包来更好地解释问题。

4

2 回答 2

4

此问题不是 F# 特定的。你绝对必须要么

  • 将所有必需的依赖项作为 nuget 包的一部分提供
  • 让 NuGet 知道您的包依赖于将提供所需参考的其他包

一个 nuget 包可以很容易地包含多个 dll(如果打包正确)。您可以在此处阅读有关如何创建包的更多信息:http: //docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package

如果您在将 NuGet 与您的项目 msbuild 脚本集成时遇到问题,我建议您查看其他开源项目用于构建其 NuGet 包的脚本(例如,查看 FSharpX 或 FSharp Power Pack)。

于 2012-11-19T13:55:25.453 回答
3

依赖于 FSharpx.Core 的 FSharpx.TypeProviders 也存在类似问题。解决方案是使用 ILMerge 将所有依赖项合并到类型提供程序中。检查https://github.com/fsharp/fsharpx/issues/91中的线程

于 2012-11-20T11:38:21.757 回答