在目标框架为 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 兼容?
最佳答案
您混淆了 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)
关于c# - 使用 MsBuild 4.0 编译的程序集是否与只有 .NET 3.5 的计算机兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4935896/