首页 文章

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

提问于
浏览
5

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

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

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

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

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

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

  • 这迫使Windows和Linux有两种不同的部署方案;

  • 在Mono上,这可能会强制使用较旧的FSharp代码而不是最新Visual Studio中可用的代码 .

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

1 回答

  • 0

    我的理解是,如果将 FSharp.Core 与应用程序包含在任何平台中,至少对于Framework Dependent Deployments,则在查找GAC之前首先探测并使用本地bin目录 . 这里可能还有很多其他的细微之处,但至少从我的理解来看,你的本地复制版本的FSharp.Core将是你的应用程序使用的版本 .

    顺便说一句,通过使用一些反射来查看源自FSharp.Core的加载类型并查看它来自哪个程序集,应该相对容易进行测试 . 此外,我可以回想起 AppDomain.AssemblyResolve 或类似的事件可能会让你更深入地了解解决过程,甚至可以稍微定制它 .

    值得一提的是,就GAC而言,这个故事可能会在.NET Core上发生很大的变化,同时还有我上面提到的反射相关技术的可用性 .

    有关:

相关问题