【问题标题】:Portable Class Library using F# without FSharp.Core.dll reference使用 F# 的可移植类库,没有 FSharp.Core.dll 参考
【发布时间】:2014-01-25 00:41:25
【问题描述】:

我尝试使用 F# 创建可移植类库,例如可以从 C# 代码中使用。但看起来像使用标准 F# 构造,例如 raise 使得 FSharp.Core.dll 成为使用创建的可移植类库所必需的。

raise(ArgumentNullException("parameter")) 转化为

Operators.Raise<Unit>(new ArgumentNullException("source"));

(其中Operators.Raise 位于Microsoft.FSharp.Core 命名空间中)而不仅仅是

throw new Exception

我认为这不是唯一一个从 FSharp.Core.dll 库编译为某个静态方法的 F# 构造。

有什么方法可以创建编译后不需要引用 FSharp.Core.dll 或任何其他 FSharp 特定的 F# 代码(尤其是可移植类库) 图书馆?

【问题讨论】:

  • 该参考文献的问题在哪里?
  • 您可能想查看this answer 来合并程序集,尽管我不确定这是否适用于 PCL (?)。除此之外,我认为这是不可能的,即使是 F# 中的函数也不使用Func&lt;&gt;,而是使用FSharp.Core 中的FSharpFunc&lt;&gt;

标签: c# f# portable-class-library


【解决方案1】:

如果你用

编译代码
--standalone

编译器将执行与静态链接等效的操作。因此,在运行时将不需要引用。

这可能是你能做的最好的了。

【讨论】:

    【解决方案2】:

    理想情况下,您将引用针对特定配置文件构建的可移植版本的 FSharp.Core,而不是静态链接所有内容。

    我认为配置文件 47、88 和 158 有可移植版本。

    【讨论】:

    • 对于 F# 3.0,只有配置文件 47,对于 F# 3.1,只有配置文件 47 和 7。
    • 反正开源只有47个,我以为VS2013打包了158个?
    • 不,不幸的是它只发货了 7 和 47
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    • 2023-04-06
    • 2013-02-15
    • 1970-01-01
    相关资源
    最近更新 更多