2012-03-20 57 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

相關問題