Language version and .net version
我的问题与此类似,但我想知道是否可以在旧版本的.NET中使用不同版本的C。在我看来,这是可能的,因为例如,lambda本身与框架没有任何关系,它是一个C(和vb,但这里我只讨论C)。
问题是,我不能测试这一点,因为只有2005年的vs工作,我的家用电脑坏了。
所以,在vs 2010/2012中创建.NET 2.0项目时,我可以使用lambda/linq等吗?
So, when creating a .NET 2.0 project in VS 2010/2012, can I use lamda's / Linq etc?
我有一页专门写这种东西。有些特性是特定于框架的(或特定于CLR),而有些则不是。
例如,可以使用lambda表达式、匿名类型以及自动实现的.NET 2.0属性,而不会出现任何问题。
如果提供其他实现(如LinqBridge),则可以使用LinqTo对象。其他LINQ提供程序(LINQ到SQL等)显然可以使用Mono中的库,但就个人而言,如果可能的话,我宁愿升级到更高版本的框架。
您将无法使用C 4中的动态类型,因为它需要只在.NET 4中存在的类型,而且我认为这些类型不容易以兼容的方式进行反向移植。(这可能是可能的,因为至少有一个用于.NET 3.5的DLR版本,但是这是否能很好地与C 4编译器配合使用是另一回事。)
如果将目标框架设置为2.0并使用Visual Studio 2010,则可以使用lambda表达式。但是不能使用现成的LINQ,因为该框架是在.NET 3.5中引入的。
你应该看到这篇文章:解开乔恩·斯基特的版本
有语言和编译器,还有clr。可以在clr2.0上运行.NET 2.0、3.0和3.5。不能在clr2.0上使用.NET 4功能。
因此,可以将项目设置为.NET 3.5,在.NET 3.5的计算机上编译它,并在.NET 2.0的计算机上运行它。
语言版本和框架版本实际上是捆绑在一起的,Visual Studio还将根据项目设置确定哪些功能可用。
对于.NET 2.0项目,您将无法使用LINQ,因为它将绑定到C 2.0,而不是C 3.0(在引入LINQ时,扩展方法也是如此)。
请注意,3.0和3.5框架使用2.0运行时。