我需要任意精度的有理数,据我所知,F# powerpack 中提供了这些有理数。我的问题是关于分配机制;我的程序至少需要能够在 Windows/.Net 和 Linux/Mono 上编译和运行,因为我在这两个平台上都有潜在用户。据我了解,最好的程序是:
下载 powerpack .zip,而不是安装程序。
将 DLL 复制到我的程序目录中。
将随附的许可证文件复制到我的程序目录中,以确保一切正常。
声明引用并继续使用我需要的函数。
将上述文件连同我的源代码和二进制文件一起发送,并且由于 DLL 使用字节代码,它可以在任何平台上正常工作。
这是正确的程序吗?我错过了什么吗?
最佳答案
您基本上是正确的,任意精度有理数仅在 PowerPack 中可用(BigInteger
是 .NET 4.0 的一部分,但有理数仍然是特定于 F# 的)。
但是,您还需要使用 F# 运行时可再发行组件(即 FSharp.Core.dll
程序集)来分发您的程序。它包含一些不属于标准 .NET 运行时的基本 F# 类型(例如用于表示函数的类型)。
- 有关 F# Redistributable Package 的更多信息可以在 MSDN 上找到
- 您可以下载
FSharp.Core.dll
redist from Microsoft Downloads .
当您添加对项目的引用时,编译器会在您的应用程序中包含引用库的名称和版本。当应用程序启动时,运行时会尝试在不同的地方定位库。因此,要在 .NET 和 Mono 上部署您的应用程序,您需要(以某种方式)将您的应用程序与 FSharp.Core.dll
和 FSharp.PowerPack.dll
。
F# Redistributable 和 F# PowerPack 安装程序将库放置到计算机上所有 .NET 应用程序共享的 GAC(全局程序集缓存)中。在 Mono 上,您可以使用 gacutil tool 获得相同的结果。 (从命令行)。在这种情况下,您需要将它们复制到某处(任何地方)并运行此工具。您的应用程序会在 GAC 中找到它们。
或者,如果您将程序集放置在与您的应用程序(
exe
文件)相同的文件夹中,那么 .NET 和 Mono 也应该能够正确找到它们并且它应该可以工作。我认为出于版本控制的原因,不鼓励这样做(例如,可以轻松更新全局安装的文件),但我不认为许可证禁止这种形式的部署。
似乎要创建 .NET/Mono 可再发行组件,使用第二种技术会更容易(因为它允许简单的 xcopy 部署)。
关于F# powerpack 和分发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2932232/