C#4.0编译器生成的IL能否在CLR 2.0上运行?
澄清一下,我不是在询问 VS 2010 多目标(VS 选择正确的编译器版本),我想知道 csc.exe 4.0 是否支持多目标...
最佳答案
如果一切都失败了,试试吧。我刚刚在 VS2010b2 中测试了以下内容,针对 2.0 编译:
using System;
class Program {
static void Main() {
Write();
Write(msg: "world");
Console.ReadLine();
}
static void Write(string msg = "Hello") {
Console.WriteLine(msg);
}
}
这使用了两个新的 C# 4.0 语言 特性,它们使用 .NET 2.x/3.x/CLR 2 中也存在的元数据;它在我的常规 (CLR 2) 机器上运行良好(我的 VS2010b2 是一个虚拟机)。所以我得出结论“是的,对于某些功能”。显然,如果您使用依赖于框架的功能(dynamic
等),结果就不会这么好。
编辑:回复您的评论;我已经在命令行中尝试了 csc
,默认情况下,这 确实 以 CLR 4 为目标;我会尝试看看我是否可以将它定位到 CLR 2(就像 VS 显然可以)。不幸的是,它不再在构建输出窗口中包含(伪造的,顺便说一句)命令行...
更新:一些“知情者”返回:
Pass /nostdlib and a reference to the 2.0 mscorlib.dll.
果然:
C:\Windows\Microsoft.NET\Framework\v4.0.21006>csc /nostdlib /reference:%SystemRo
ot%\microsoft.net\framework\v2.0.50727\mscorlib.dll /out:c:\my.exe /target:exe "
C:\Users\Marc\Documents\Visual Studio 2010\Projects\ConsoleApplication6\ConsoleA
pplication6\program.cs"
Microsoft (R) Visual C# 2010 Compiler version 4.0.21006.1
Copyright (C) Microsoft Corporation. All rights reserved.
工作正常(exe 在我的非 4.0 机器上工作)。图片来源:Kevin Pilch-Bisson
关于c# - C#4.0 编译器生成的 IL 可以在 CLR 2.0 上运行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1610896/