F#电源组和配电

F#电源组和配电,f#,distribution,F#,Distribution,我需要任意精度的有理数,据我所知,这些有理数在F#powerpack中可用。我的问题是关于分配机制;我的程序至少需要能够在Windows/.Net和Linux/Mono上编译和运行,因为我在这两种平台上都有潜在用户。据我所知,最好的程序是: 下载powerpack.zip,而不是安装程序 将DLL复制到我的程序目录中 将随附的许可证文件复制到我的程序目录中,以确保一切正常 声明引用并继续使用我需要的函数 将上述文件与我的源代码和二进制文件一起发送,因为DLL使用字节码,所以它在任何平台上都可以正

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

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

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

  • 将随附的许可证文件复制到我的程序目录中,以确保一切正常

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

  • 将上述文件与我的源代码和二进制文件一起发送,因为DLL使用字节码,所以它在任何平台上都可以正常工作


  • 这是正确的程序吗?我遗漏了什么吗?

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

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

    • 有关的更多信息,请访问MSDN
    • 您可以下载
      FSharp.Core.dll
      redist
    向项目添加引用时,编译器会在应用程序中包含引用库的名称和版本。当应用程序启动时,运行时会尝试在不同的位置定位库。因此,要在.NET和Mono上部署应用程序,您需要(以某种方式)将应用程序与
    FSharp.Core.dll
    FSharp.PowerPack.dll
    一起分发

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

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


    似乎对于创建.NET/Mono可再发行版本来说,使用第二种技术会更容易(因为它允许简单的xcopy部署)。

    那么--standalone选项呢,这是个坏主意吗?@Benjol:好主意<代码>--standalone选项将所有引用的库编译到生成的程序集中(因此程序集应该单独在普通平台上工作)。这有点“不雅观”,如果你的程序由多个程序集组成,它将不起作用,但对于单个程序集项目,它应该是好的。4.5 NET的情况大致相同吗?@AshHarley On MS.NET的故事仍然是一样的。然而,
    FSharp.Core.dll
    现在作为标准安装的一部分在Mono3.0中提供。