我可以在Mono/Linux上使用Visual Studio附带的FSharp.Core吗?

Dmy*_*roL 5 .net mono f#

因为我感到困惑,我会感激一些帮助.

如果我相信这个页面,使用我的应用程序部署FSharp核心的最佳方法是将FSharp.Core.dll与app二进制文件一起复制("xcopy部署").

在已编译的应用程序中,您永远不应假设FSharp.Core位于GAC("全局程序集缓存")中.相反,您应该将适当的FSharp.Core部署为应用程序的一部分.

到目前为止一切都很好,我对Windows感到非常满意...... 但是,关于Mono,同一页面上写着:

在Mono上Linux和Mac上的F#工具的标准安装也会将最新的FSharp.Core安装到GAC中.他们还为该组件添加了机器范围的绑定重定向.这意味着,对于这些机器,应用程序将使用最新安装的FSharp.Core

哪种提示应该使用应用程序部署FSharp核心副本,并且将从Mono GAC中获取正确版本的FSharp核心.我对此有两个问题:

  1. 这迫使Windows和Linux有两种不同的部署方案;
  2. 在Mono上,这可能会强制使用较旧的FSharp代码而不是最新的Visual Studio中可用的代码.

这两个问题都可能通过始终从GitHub源和应用程序构建FSharp核心来解决,但这看起来也不是一个优雅的解决方案.所以我想知道无论平台如何,总是使用最新FSharp核心的正确方法是什么(如果可能的话)?

jpi*_*son 0

我的理解是,如果您将FSharp.Core应用程序包含到任何平台,至少对于框架相关部署,首先会探测并使用本地 bin 目录,然后再查看 GAC。这里可能还有许多其他微妙之处,但至少从我的理解来看,您本地复制的 FSharp.Core 版本将是您的应用程序使用的版本。

顺便说一句,通过使用一些反射来查看源自 FSharp.Core 的加载类型并查看它来自哪个程序集,测试应该相对容易。此外,根据我的记忆AppDomain.AssemblyResolve或类似的事件,您可能可以更多地了解解决过程,甚至可以对其进行一些自定义。

应该提到的是,就 GAC 而言,随着我上面指出的反射相关技术的可用性,.NET Core 的情况可能已经发生了相当大的变化。

有关的: