我正在用F#编写一个程序,我在Visual Studio项目设置中指定了.Net 3.5,这是最高的提供,理论上我可能会得到最好的.
然后我尝试在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
Run Code Online (Sandbox Code Playgroud)
这是因为.NET版本有点令人困惑.语言,运行时和库本身都有单独的版本号..NET 3.5在运行时的2.0版本上运行,实际上只是其他程序集的集合.如果您没有引用任何新程序集,那么您的应用程序本质上是一个2.0应用程序,因为.NET 3.5的核心是2.0.
幸运的是,最新版本的库,运行时和C#都称为版本4.
关于.NET的wiki文章有更多细节.