我感到困惑,感谢一些帮助。
如果我相信这个page,使用我的应用程序部署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核心。我对此有两个问题:
这两个问题都可能通过总是从GitHub源代码和应用程序构建FSharp核心来解决,但这看起来也不是一个优雅的解决方案。所以我想知道无论平台如何,总是使用最新FSharp核心的正确方法是什么(如果可能的话)?
答案 0 :(得分:0)
我的理解是,如果将FSharp.Core
包含应用程序到任何平台,至少对于Framework Dependent Deployments,则在查找GAC之前首先探测并使用本地bin目录。这里可能还有许多其他的细微之处,但至少从我的理解来看,你的本地复制版本的FSharp.Core将是你的应用程序使用的版本。
顺便说一句,通过使用一些反射来查看源自FSharp.Core的加载类型并查看它来自哪个程序集,测试应该相对容易。此外,我可以回想起AppDomain.AssemblyResolve
或类似事件可能会让您更深入地了解解决过程,甚至可以对其进行一些定制。
应该提到的是,就GAC而言,关于.NET Core的故事可能会发生很大变化,以及我在上面指出的反射相关技术的可用性。
相关: