c# - C#4.0 编译器生成的 IL 可以在 CLR 2.0 上运行吗?

标签 c# .net

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/

相关文章:

c# - 如何更改焦点在 WPF 中的显示方式?

.net - 如何查看优化的 jitted .NET 代码的反汇编?

c# - 使用 C# 对大型 XML 文件进行 XSLT 转换

c# - 在 GridView 中为复选框列生成新列

c# collection.RemoveAll(collection.OfType<type>());

java - 使用 java 通过 TransportWithMessageCredentials (UserName) 访问 WCF 服务

.net - RegFree COM 从 C# 工作,而不是从 VBA 工作

c# - 在 C# 中使用 LINQ 自动递增通用列表

c# - 找不到类型或命名空间名称 'Twilio'

c# - 自动调整面板上呈现的多个表单的大小