F#和.Net版本

时间:2010-05-30 06:22:44

标签: .net msbuild f#

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

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

另一个难题是我正在使用的MSBuild版本来编译程序的发布版本,我在框架3.5目录中找到了它,但声称是框架2.0和构建引擎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

2 个答案:

答案 0 :(得分:8)

这是因为.NET版本有点令人困惑。语言,运行时和库本身都有单独的版本号。 .NET 3.5在运行时的2.0版本上运行,实际上只是其他程序集的集合。如果您没有引用任何新程序集,那么您的应用程序本质上是一个2.0应用程序,因为.NET 3.5的核心是2.0。

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

The wiki article on .NET有更详细的信息。

答案 1 :(得分: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中可用,无论版本如何。)