在目标框架为3.5的项目中,以下行使用MsBuild 4.0进行编译:
aEnumerable.Select(aMethod);
但是MsBuild 3.5要求我写:
aEnumerable.Select(item => aMethod(item));
这两个二进制文件是否会运行没有.NET Framework 4.0但使用.NET 3.5的计算机?
PS:虽然我展示了一个使用“方法过载推理”的例子,但其他“4.0”特征(例如“命名参数”)也是如此。
此问题的另一个标题可能是:C#4.0 / Visual Studio 2010的哪些功能与.NET 3.5兼容?
答案 0 :(得分:9)
你混淆了Msbuild和.NET框架。
Msbuild只是构建.NET项目的工具。构建.NET 4项目需要4.0版,但它也可以执行.NET 1.1,2.0,3.0,3.5,3.5 SP1。 就像使用Word 2010打开Word 2003文件一样。 2010年将同时开放,但如果你给它一个2010年的文件,2003年将崩溃
您的代码示例显示了在4.0版中添加到框架的不同内容。您无法在未安装.NET 4.0框架的计算机上执行.NET 4代码。无论是什么构建它,运行时将无法理解CLR并且它将无法运行
至于msBuild本身: MsBuild 4.0是一个新版本,主要更新为支持.NET 4,但也有自己的功能。如果您需要这些详细信息,请参阅msbuild4的发行说明。
也就是说,只要正确配置了targetFramework,MsBuild 4就能完全生成.NET 3.5输出。 (在将所有项目升级到.NET 4框架之前很久,我们将所有构建都移动到了MsBuild 4.0)
答案 1 :(得分:1)
如果您将安装目标定位到.NET 3.5 SP 1并且它可以工作,那么它将在仅具有.NET 3.5 Service Pack 1的计算机上运行。如果您不应该以3.5 SP1为目标。
MSBuild的3.5版本,即 与.NET 3.5捆绑在一起(和 Visual Studio 2008),允许.NET 要为2.0建造的项目, 3.0或3.5 .NET版本支持(也称为“多目标”)。
我会推断MSBuild 4将更新为也支持.NET Framework 4.0。您当然应该自己测试您的安装虚拟机并确保一切正常。
我只是想澄清一下,如果要删除可能出现的任何兼容性问题,您应该使用MsBuild 3.5方法。我怀疑MSBuild 4.0会继续支持旧方法,但只是更新以支持4.0 .NET Framework中发生的更改。
类似于以下的命令 应该工作
msbuild YourSolution.sln /tv:3.5 /p:TargetFrameworkVersion=v3.5或
msbuild YourSolution.sln /p:TargetFrameworkVersion=v3.5 / tv(或 / toolsversion)指示哪个版本 您要使用的MSBuild工具, 和财产 TargetFrameworkVersion表示 目标框架。在你的情况下 指定该属性应该是 很好,但如果你想使用3.5 MSBuild工具集,你可以sepcify它 与/ TV一样,我在第一次 命令。