首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C# 4.0编译器生成的IL可以在CLR2.0上运行吗?

C# 4.0编译器生成的IL可以在CLR2.0上运行吗?
EN

Stack Overflow用户
提问于 2009-10-23 09:05:35
回答 3查看 1.1K关注 0票数 6

C# 4.0编译器生成的IL可以在CLR2.0上运行吗?

为了澄清,我不是问VS2010多目标( VS选择正确的编译器版本),我想知道csc.exe 4.0是否支持多目标...

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-10-23 12:17:47

如果其他方法都失败了,试一试。我刚刚在VS2010b2中测试了以下代码,针对2.0进行了编译:

代码语言:javascript
运行
复制
using System;    
class Program {
    static void Main() {
        Write();
        Write(msg: "world");
        Console.ReadLine();
    }
    static void Write(string msg = "Hello") {
        Console.WriteLine(msg);
    }
}

它使用了两个新的CLR4.0语言特性,它们使用了.NET 2.x/3.x/clr2中也存在的元数据;它在我的常规(Clr2)机器(我的VS2010b2是一个VM)上执行得很好。因此,我的结论是“是的,对于某些特性”。显然,如果你使用依赖于框架的特性(dynamic等),结果就不会那么好了。

编辑:重新编辑您的注释;我在命令行中尝试了csc,默认情况下,这是针对CLR4的;我将尝试是否可以将其转到目标CLR2(就像VS显然可以)。不幸的是,它不再在构建输出窗口中包含(faked,btw)命令行...

更新:一些“知情”的人回来时说:

传递/nostdlib和对2.0 mscorlib.dll的引用。

果然:

代码语言:javascript
运行
复制
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

票数 7
EN

Stack Overflow用户

发布于 2009-10-23 09:07:43

C# 4.0使用.NET CLR4.0,因此与CLR2.0没有二进制兼容性。不过,您将能够以2.0框架为目标。

票数 1
EN

Stack Overflow用户

发布于 2009-10-23 09:35:08

这取决于编译器。

到目前为止的迹象似乎表明,C# 4.0编译器将能够面向.NET 2.0运行时,生成与该运行时兼容的IL,并确保您只引用也在.NET 2.0上运行的程序集。

请注意,目标是一种选择,但不能保证任何其他编译器都会具有相同的功能。

大多数情况下,我猜这是一个由实现编译器的团队做出的决定。

例如,C#和VB.NET编译器团队可能会支持多目标(尽管他们可能会放弃这一点,并将其保留为Visual Studio的一个功能,其中VS为不同的目标选择不同的编译器)。

其他使用.NET框架的供应商可能会做出其他决定。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1610896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档