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