F#和.Net版本

F#和.Net版本,.net,msbuild,f#,.net,Msbuild,F#,目前我正在用F#编写一个程序,我在Visual Studio项目设置中指定了该程序,目标是.Net 3.5,这是提供的最高版本,理论上我可能会得到最好的版本 然后我试着在XP机器上运行编译后的程序,并不期望它能工作,只是想看看会发生什么。不出所料,我刚刚收到一条错误消息,要求提供适当的框架版本,但令人惊讶的是,它要求的不是3.5版本,而是2.0.50727版本 另一个难题是我用来编译程序发布版本的MSBuild版本,我在Framework3.5目录中找到了它,但声称它是Framework2.0和

目前我正在用F#编写一个程序,我在Visual Studio项目设置中指定了该程序,目标是.Net 3.5,这是提供的最高版本,理论上我可能会得到最好的版本

然后我试着在XP机器上运行编译后的程序,并不期望它能工作,只是想看看会发生什么。不出所料,我刚刚收到一条错误消息,要求提供适当的框架版本,但令人惊讶的是,它要求的不是3.5版本,而是2.0.50727版本

另一个难题是我用来编译程序发布版本的MSBuild版本,我在Framework3.5目录中找到了它,但声称它是Framework2.0和BuildEngine 3.5。我只是猜测它是使用MSBuild的正确版本,因为它似乎与F#似乎能够瞄准的最高框架版本相对应,但我应该使用不同的版本吗?有人知道发生了什么吗

C:\Windows>dir/s msbuild.exe
 Volume in drive C is OS
 Volume Serial Number is 0422-C2D0

 Directory of C:\Windows\Microsoft.NET\Framework\v2.0.50727

27/07/2008  19:03            69,632 MSBuild.exe
               1 File(s)         69,632 bytes

 Directory of C:\Windows\Microsoft.NET\Framework\v3.5

29/07/2008  23:40            91,136 MSBuild.exe
               1 File(s)         91,136 bytes

 Directory of C:\Windows\Microsoft.NET\Framework\v4.0.30319

18/03/2010  16:47           132,944 MSBuild.exe
               1 File(s)        132,944 bytes

 Directory of C:\Windows\winsxs\x86_msbuild_b03f5f7f11d50a3a_6.0.6000.16386_none_815e96e1b0e084be

20/10/2006  02:14            69,632 MSBuild.exe
               1 File(s)         69,632 bytes

 Directory of C:\Windows\winsxs\x86_msbuild_b03f5f7f11d50a3a_6.0.6000.16720_none_81591d45b0e55432

27/07/2008  19:00            69,632 MSBuild.exe
               1 File(s)         69,632 bytes

 Directory of C:\Windows\winsxs\x86_msbuild_b03f5f7f11d50a3a_6.0.6000.20883_none_6a9133e9ca879925

27/07/2008  18:55            69,632 MSBuild.exe
               1 File(s)         69,632 bytes

C:\Windows>cd Microsoft.NET\Framework\v3.5

C:\Windows\Microsoft.NET\Framework\v3.5>msbuild /ver
Microsoft (R) Build Engine Version 3.5.30729.1
[Microsoft .NET Framework, Version 2.0.50727.3053]
Copyright (C) Microsoft Corporation 2007. All rights reserved.

3.5.30729.1

这是因为.NET版本有点混乱。语言、运行时和库本身都有单独的版本号。NET 3.5在运行时的2.0版本上运行,实际上只是附加程序集的集合。如果不引用任何新程序集,则应用程序本质上是一个2.0应用程序,因为.NET3.5的核心是2.0

幸运的是,在最新版本的库中,运行时和C#都被称为版本4

有更多详细信息。

关于F#更具体地说,目前有两个版本:

  • Visual Studio 2010附带的版本-这是您可以获得的最新版本,是为.NET 4.0设计的(正如Brian指出的,这是运行时的全新版本)。此版本的F#依赖于.NET 4.0库中提供的一些功能,因此为.NET 4.0编译的F#程序无法在.NET 2.0上运行

  • Visual Studio 2008的版本(也称为CTP)。此版本正在生成与2.0运行时兼容的程序集(也被.NET 3.0和3.5使用)。如果仅使用.NET 2.0程序集,则应用程序将在.NET 2.0上运行,但如果使用WPF(.NET 3.0)或LINQ(.NET 3.5),则应用程序将需要更新的.NET


在任何情况下,F#应用程序也需要使用
FSharp.Core.dll
(对于.NET 4.0或2.0)分发,这是一个F#运行时(包含F#程序所需的一些功能,但在.NET中不可用,无论版本如何)。

而且,这两个版本的F#实际上都被称为F#2.0,我认为VS2010附带的版本是F#4.0。至少,如果您在一台有.NET 4.0但没有F#的计算机上运行VS 2010生成的F#程序,它会抱怨缺少DLL FShare.Core.DLL版本4.0.0.0。今天遇到了这个问题…@NelsBeckman没有F#4.0,因为这意味着语言规范的版本4,而不是dll。有一款F#2.0,在之前发布的所有point版本之后,它基本上是“现在已经足够稳定了”。还有F#3.0,其中包括类型提供程序。在CLR 4.0和CLR 4.5上,F#3.0有DLL版本4.0和4.3。更重要的是,它完全令人困惑,因为在mono上,有mono 3.x,它在OSX版本中包含F#,在自己编译版本中不包含F#。