如何通过NuGet分发F#类型提供程序?

How do I distribute an F# Type Provider via NuGet?

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

我会收到类似以下的错误:
错误FS3033:类型提供程序'Froto.Gen.ProtoTypeProvider'报告了一个错误:无法加载文件或程序集'Froto.Roslyn,版本= 0.0.0.1,区域性=中性,PublicKeyToken =空'或其依赖项之一。系统找不到指定的文件。

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

所有依赖项都在项目中。如果我将它们全部复制到package \\\\ Froto.Gen.0.0.0.1 \\\\ lib \\
et45 \\\\,类型提供程序起作用。

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


此问题不是特定于F#的。您绝对必须

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

一个nuget软件包可以轻松地包含多个dll(如果package正确)。您可以在此处进一步了解如何创建包:http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package

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


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

中的线程