2010-01-08 28 views

回答

9

2.0之後的所有版本的C#編譯器都可用於定位2.0 CLR/Runtime。這被稱爲關閉目標。編譯器只允許使用以前版本運行時支持的功能,並且如果您嘗試使用不是的功能,將會提供錯誤。例如,在定位2.0時使用動態。

+0

但是,這仍然會迫使他最終使用C#2.0,不是嗎? – 2010-01-08 13:33:59

+0

@Justin,根本沒有。您可以在2.0運行時使用C#3.0的幾乎所有功能。使用LINQ需要像LINQBridge這樣的輔助函數庫,但是一旦使用,就可以編寫完整的LINQ來查詢對象查詢。我所知道的唯一特徵是表達式樹,這是由於2.0RTM中的CLR問題。 – JaredPar 2010-01-08 13:36:05

+0

@Justin,不,您可以繼續使用不需要運行時支持的新功能。例如,「var」關鍵字(類型推斷)就可以使用,因爲這完全是在編譯時完成的。 – Tobi 2010-01-08 13:36:11

0

3和3.5 shuold工作正常!

0

C#不是運行時;這是語言。您需要成爲非常明確您的意思。

靶向.NET 2.0:

您可以使用VS2008和C#3.0的目標.NET 2.0,包括使用所有的C#3.0語言特性,比如通過LINQ之類的東西LINQBridge。但是,您不應該無意中引用.NET 2.0 SP1運行時功能(TimeZoneInfo?)或錯誤/「功能」,因此您應該測試實際的目標框架。

靶向C#2.0:

如果你想語言的兼容性,您可以在項目(禁用C#3.0的功能)設置此,但這又不是100% - 它會錯過一些東西像類型推理增強;以下是罰款在C#3.0,但不是C#2.0,但與ISO-2啓用編譯:

int[] arr = {1,2,3}; 
string[] arr2 = Array.ConvertAll(arr, delegate (int i) {return i.ToString();}); 
1

的CLR版本並沒有改變自2005年以來,它仍然是2.0版本。即將改變,4.0將在春季發佈。

你唯一需要考慮的就是你依賴的.NET程序集。像WPF,WCF和Linq這樣的東西如果你的客戶被困在.NET 2.0版本中,可能不太可能。您可以輕鬆避免在VS2008中創建這種依賴關係。項目+屬性,應用程序選項卡,目標框架組合。

相關問題