问题 使用F#而不使用FSharp.Core.dll引用的可移植类库


我尝试使用F#创建可移植类库,例如可以使用C#代码。但看起来像使用标准的F#构造,如 raise 品牌 FSharp.Core.dll 必须使用创建的可移植类库。

raise(ArgumentNullException("parameter")) 变成了

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

(哪里 Operators.Raise 住在 Microsoft.FSharp.Core 命名空间而不仅仅是

throw new Exception

我假设这不是唯一被编译为某种静态方法的F#构造 FSharp.Core.dll 图书馆。

有没有办法创建F#代码(特别是可移植类库),编译后不需要引用 FSharp.Core.dll 或任何其他 FSharp专用 图书馆?


6842
2018-01-24 06:50


起源

该参考的问题在哪里? - TGlatzer
你可能想看一下 这个答案 合并程序集,虽然我不确定这是否适用于PCL(?)。除此之外,我认为这是不可能的,即使F#中的函数也不使用 Func<> 但 FSharpFunc<> 从 FSharp.Core。 - Patryk Ćwiek


答案:


如果您使用编译代码

--standalone

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

这可能是你能做的最好的事情。


12
2018-01-24 07:17





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

我认为有配置文件47,88和158的便携版本。


1
2018-01-24 16:41



对于F#3.0,只有配置文件47,对于F#3.1,只有配置文件47和7。 - Gustavo Guerra
反正只有47个可用开源,我以为VS2013打包158? - 7sharp9
不,不幸的是,它只运送了7和47 - Gustavo Guerra