我们知道,F# 2.0 有面向 .NET Framework 2.0 和 .NET Framework 4 的两个运行时。此外,F# 2.0 还有一个面向 Silverlight 的运行时。
面向 .NET Framework 2.0 的 F# 2.0 运行时的核心库 (FSharp.Core.dll) 将一些 API 包含在 System 命名空间中,这些 API 与 F# 开发所需的 .NET Framework 4 API 相同。例如 System.Numerics.BigInteger 和 System.Tuple 就是这样。
Windows 操作系统:
Linux 操作系统:
使用 .NET Reflector 来查看:
![](https://i-blog.csdnimg.cn/blog_migrate/11d294ba8c0a800f29f03e9dcd614ee7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/45e96e7165e9611c5a22c41534c10483.png)
让我们琮看看下面的 test.fs 程序:
1: open System;
2: printfn "OS Version: %A" Environment.OSVersion
3: printfn "CLR Version: %A" Environment.Version
4: printfn "%s" (8I.GetType().AssemblyQualifiedName)
在 Linux 操作系统下编译和运行(使用面向 .NET Framework 2.0 的 F# 2.0 运行时):
上面的 test2.exe 使用 --standalone 参数编译,表示以静态方式将 F# 库与依赖于此库的所有引用的 DLL 链接到所生成的程序集中。可以看出,在 test.exe 程序中,System.Numerics.BigInteger 是定义中 FSharp.Core 程序集中,而在 test2.exe 中,System.Numerics.BigInteger 被链接到生成的 test2 程序集中。
在 Windows 操作系统下编译和运行(使用面向 .NET Framework 4 的 F# 2.0 运行时):
可能看出,使用面向 .NET Framework 4 的 F# 2.0 运行时,System.Numerics.BigInteger 是 .NET Framework 4 的一部分,位于 System.Numerics 程序集中。不管是否使用 --standalone 参数编译,都不会改变这一点。
此外,IronRuby 以及 IornPython 也分成面向 .NET Framework 2.0 和 .NET Framework 4 两个版本。