使用C#3.0编译的C#2.0代码消耗程序集
时间:2020-03-05 18:39:20 来源:igfitidea点击:
鉴于CLR尚未真正更改,这应该很好吗?
运行C2.0代码的盒子已经推出了.NET 3.5.
背景是我们有一个Windows服务(使用VS2005构建的.NET 2.0 exe,已部署到约150个服务器),该服务可动态加载程序集(几乎像插件一样)以完成要求它的各种工作项。每当我们推出总线逻辑的新版本时,只要将程序集放在FTP服务器上,Windows服务就会知道如何检查,获取和存储最新版本。现在使用VS2008和目标.NET 2.0构建新的程序集,我们知道它可以正常工作。但是,我们希望开始利用LINQ等C3.0语言功能,并针对.NET 3.5定位程序集,而无需构建和部署Windows服务的新版本。
解决方案
回答
C#3和.Net 3.5添加了新的程序集,但IL保持不变。
这意味着,只要我们不使用Linq或者引用System.Linq或者System.Core的任何其他程序,就可以使用.Net 2程序集编译并使用C#3.
Yield,var,lambda语法,匿名类型和初始化程序都是编译器的聪明之处。它们产生的IL是交叉兼容的。
如果我们可以引用3.5的新程序集,那么它们都应该可以正常工作。
没有新版本的ASP.Net,它仍应为2.0.50727,但仍应编译为3.5
回答
这是有趣的东西。昨天在这个论坛上有人向我推荐LinqBridge时,我正在看他们,他们正在做类似的事情。
我感到奇怪的是,当它们全部编译以产生与2.0 CLR相同的IL时,Microsoft将框架命名为2.0、3.0和3.5. 我本来以为将版本添加到2.0会更有意义,我想这也很难使人们明白运行时,编译器和语言的版本不同这一事实。
回答
yield, var, lambda syntax, anon types and initialisers are all compiler cleverness. The IL they produce is cross-compatible.
采摘点次要,但产量仍然是2.0。