2012-03-20 59 views
8

我期望框架级别的更新(例如async)不能被编译为在较低的框架上工作,但是编译器的差异(例如foreach循环变量作用域)在使用C#5.0编译为.net 4.0时正确工作? 任何人都可以提供一个确定的清单吗? C#5.0的哪些功能可以编译为在.net 4.0上运行

编辑:

而不是要求一个明确的清单,这是我拿回来作为一个好多问了,会有人能够回答编译器级别的更改(如的foreach变量的作用域)是否会表现在对早期的框架版本使用C#5.0时不同。

+2

异步不上4.0的工作, http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=9983,它的唯一编译器更改,生成的il运行在.net 4.0上 – 2012-03-20 15:33:19

+0

通常,较新的语法将被限制为“current “框架。诸如(当前)版本的Async CTP之类的功能将继续有效。微软当然还没有建议在生产代码中使用Async CTP。 4.5本身的一个直接功能的所有东西都不可能由微软移植(目前没有任何用处),我不相信他们正在改变编译器,就像他们从.NET Framework 3.5 SP1的改变中所做的那样。 – 2012-03-20 15:43:41

回答

4

所有这些。没有什么真正需要新的运行时间支持 - 一些功能只需要新的库。但并不要求您针对.NET 4.5库进行编译 - 您也可以提供您自己的相同API的实现。

例如,下面的文件添加到您的项目启用异步支持/等待在.NET 4.0中的项目:https://gist.github.com/1961087

我还没有与呼叫者信息属性尝试过,但我敢肯定即使你自己定义它们,而不是使用.NET 4.5中的那些,它们也可以工作。

相同的技巧与class ExtensionAttribute工作在C#3使用与.NET 2.0的扩展方法,你甚至可以使用完整的LINQ到对象在.NET 2.0(LinqBridge

3

就功能而言,4.0中的任何语法都可以在4.0中编译,即使您最初在5.0中生成它。如果您在项目属性中更改.NET Framework版本,Visual Studio 11会通知您无法在4.0中运行的代码,因此这将成为我的指导。如果编译为4.0是一个问题,请使用VS 11编辑,但将框架兼容性保留为4.5。

有可能是一些较新的FUD,将编译为旧版本。对于以前的版本,这是真实的,但是使用新的语法并尝试向后编译会碰到或错过。

我不知道一个确定的语言功能列表(关键字,等),并没有找到一个与搜索。我还没有看到4.5版本的语言规范。

+2

.NET 4.5和C#5.0。 OP明确询问了C#5.0,因此他使用了正确的版本。 – 2012-03-20 15:44:06

+0

更正。谢谢。 – 2012-03-20 15:45:10

+0

@GregoryABeamer谢谢你的回答,我的主要问题(我想)的一部分是编译器级别的变化(比如foreach变量作用域)是否会'向下编译'到更早的.net,或者是否与早期的框架版本交换关闭这些升级功能。 – 2012-03-20 18:12:06

相关问题