我正在用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
答案 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中可用,无论版本如何。)