我需要任意精确的有理数,我可以在F#powerpack中找到它.我的问题是关于分配的机制; 我的程序至少需要能够在Windows/.Net和Linux/Mono上编译和运行,因为我在这两个平台上都有潜在的用户.据我了解,最好的程序是:
下载powerpack .zip,而不是安装程序.
将DLL复制到我的程序目录中.
将随附的许可证文件复制到我的程序目录中,以确保一切都在板上.
声明引用并继续使用我需要的函数.
将上述文件与我的源和二进制文件一起发送,并且由于DLL使用字节代码,因此它可以在任何平台上正常工作.
这是正确的程序吗?我错过了什么吗?
你基本上是正确的,任意精确有理数只能在PowerPack中使用(BigInteger
是.NET 4.0的一部分,但有理数仍然是F#特定的).
但是,您还需要使用F#runtime redistributable(即FSharp.Core.dll
程序集)分发程序.它包含一些基本的F#类型(例如用于表示函数的类型),它们不是标准.NET运行时的一部分.
有关F#Redistributable Package的更多信息,请访问MSDN
您可以从Microsoft下载中下载FSharp.Core.dll
redist .
添加对项目的引用时,编译器会在应用程序中包含引用库的名称和版本.应用程序启动时,运行时会尝试在各个位置找到库.因此,要在.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).