2008-08-13 74 views
11

這應該很好看,因爲CLR並沒有真正改變?C#2.0代碼使用C#3.0編譯的程序集

運行C#2.0代碼的盒子有已經推出了.NET 3.5。

背景是我們有一個windows服務(使用VS2005構建的.NET 2.0 exe,部署到約150臺服務器),它動態地加載程序集(幾乎像插件一樣)來完成各種要求的工作項目。每當我們推出新版本的總線邏輯時,我們只需將程序集放到FTP服務器上,windows服務就知道如何檢查,獲取和存儲最新版本。現在使用VS2008構建新的程序集,並將目標設爲.NET 2.0,我們知道這很好。不過,我們希望開始利用LINQ等C#3.0語言功能,並針對.NET 3.5定位程序集,而無需構建和部署新版本的Windows服務。

回答

7

C#3和.Net 3.5添加了新的程序集,但IL沒有更改。

這意味着與.net 2組件,你可以編譯和使用C#3,只要你不使用Linq或任何其他引用System.Linq的或System.Core程序

yieldvar, lambda語法,anon類型和初始化器都是編譯器的聰明之處。他們生產的IL是交叉兼容的。

如果你可以參考3.5的新組件,它應該都可以工作。

有ASP.Net沒有新的版本 - 它應該仍然是2.0.50727 - 但你還是應該編譯3.5

1

這是有趣的東西。昨天在這個論壇上有人向我提出這個建議並且他們正在做類似的事情之後,我昨天在尋找LinqBridge

我發現奇怪的是,微軟命名框架2.0,3.0和3.5時,他們都編譯生成相同的IL所需的2.0 CLR。我原以爲把版本添加到2.0中會更有意義,但我認爲也很難讓人們認識到存在不同版本的運行時,編譯器和語言這一事實​​。

2

產量,VAR,lambda語法,匿名類型 和initialisers都是編譯 聰明。他們生產的IL是交叉兼容的 。

小挑揀點,但收益是一個2.0的特點無論如何。