F#powerpack和发行版

rwa*_*ace 3 f# distribution

我需要任意精确的有理数,我可以在F#powerpack中找到它.我的问题是关于分配的机制; 我的程序至少需要能够在Windows/.Net和Linux/Mono上编译和运行,因为我在这两个平台上都有潜在的用户.据我了解,最好的程序是:

  1. 下载powerpack .zip,而不是安装程序.

  2. 将DLL复制到我的程序目录中.

  3. 将随附的许可证文件复制到我的程序目录中,以确保一切都在板上.

  4. 声明引用并继续使用我需要的函数.

  5. 将上述文件与我的源和二进制文件一起发送,并且由于DLL使用字节代码,因此它可以在任何平台上正常工作.

这是正确的程序吗?我错过了什么吗?

Tom*_*cek 5

你基本上是正确的,任意精确有理数只能在PowerPack中使用(BigInteger是.NET 4.0的一部分,但有理数仍然是F#特定的).

但是,您还需要使用F#runtime redistributable(即FSharp.Core.dll程序集)分发程序.它包含一些基本的F#类型(例如用于表示函数的类型),它们不是标准.NET运行时的一部分.

添加对项目的引用时,编译器会在应用程序中包含引用库的名称和版本.应用程序启动时,运行时会尝试在各个位置找到库.因此,要在.NET和Mono上部署应用程序,您需要(以某种方式)将您的应用程序与FSharp.Core.dll和一起分发FSharp.PowerPack.dll.

  • F#Redistributable和F#PowerPack安装程序将库放置到GAC(全局程序集缓存),GAC由计算机上的所有.NET应用程序共享.在Mono上,您可以使用gacutil工具(从命令行)获得相同的结果.在这种情况下,您需要将它们复制到某个地方(任何地方)并运行此工具.您的应用程序将在GAC中找到它们.

  • 或者,如果将程序集放在与应用程序(exe文件)相同的文件夹中,那么.NET和Mono也应正确定位它们并且它应该可以正常工作.我认为这是出于版本控制原因而不鼓励的(例如,全局安装的文件可以轻松更新),但我不认为许可证禁止这种形式的部署.

似乎对于创建.NET/Mono可再发行组件,使用第二种技术会更容易(因为它允许简单的xcopy depoloyment).

  • @AshHarley 在 MS .NET 上,故事仍然是一样的。然而,“FSharp.Core.dll”现在可以在 Mono 3.0 中使用(我认为)作为标准安装的一部分。 (2认同)