关于.net:使用C#3.0编译的C#2.0代码消耗程序集

关于.net:使用C#3.0编译的C#2.0代码消耗程序集

C# 2.0 code consuming assemblies compiled with C# 3.0

鉴于CLR尚未真正更改,这应该很好吗?

运行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服务的新版本。


C#3和.Net 3.5添加了新的程序集,但IL保持不变。

这意味着,只要您不使用Linq或引用System.Linq或System.Core的任何其他程序,就可以使用.Net 2程序集进行编译和使用C#3。

yieldvar,lambda语法,匿名类型和初始化程序都是编译器的聪明之处。它们产生的IL是交叉兼容的。

如果您可以引用3.5的新程序集,那么它们都应该可以使用。

没有新版本的ASP.Net-它仍应为2.0.50727-但您仍应编译为3.5


yield, var, lambda syntax, anon types
and initialisers are all compiler
cleverness. The IL they produce is
cross-compatible.

采摘点较小,但产量仍然是2.0的特征。


这是有趣的东西。昨天在这个论坛上有人向我推荐LinqBridge之后,我正在看LinqBridge,他们正在做类似的事情。

我感到奇怪的是,当它们全部编译以产生与2.0 CLR相同的IL时,Microsoft将框架命名为2.0、3.0和3.5。我本来以为将版本添加到2.0会更有意义,我想这也很难使人们了解运行时,编译器和语言的版本不同这一事实。


推荐阅读