Qwe*_*tie 14 .net compatibility compact-framework .net-3.5 .net-2.0
由于各种原因,我经常发现编写与.NET framework 2.0或3.5兼容或与.NET Compact Framework兼容的代码是可取的,但是新的.NET框架中有许多"小"特性是一个问题.在旧框架或Compact Framework中不可用.
例如,我发现扩展方法确实很有用,但编译器依赖System.Runtime.CompilerServices.ExtensionAttribute于此.您可以自己轻松定义此属性,然后在.NET Framework 2.0中使用扩展方法(在C#3.0+下).同样的,这是不是太硬手动定义小.NET 4种类型,如Tuple<T1,T2>和Lazy<T>.顺便说一句,如果你想在.NET 2.0中使用LINQ,你可以使用LinqBridge.
现在假设你ExtensionAttribute公开,以便你编写的其他程序集可以使用它.一开始就没问题,但是如果你想使用也有同样想法的第三方库呢?您添加对该库的引用,现在您有名称冲突.哎呀.
我还注意到一些新的库只适用于.NET 4.0或3.5,即使它们只有很小的依赖关系,可以使用兼容包或LinqBridge来解决.
如果旧的.NET版本的"兼容包"在一个小DLL中定义了这些小功能,你可以证明包括在任何规模的项目中,这肯定会很好.这样的事情存在吗?
更新:从沉默来判断,我想没有这样的事情.如果有兴趣,我可能会自己创建这样一个OSS库.所以我的新问题是,如果你在为.NET 2,.NET 3.5,.NETCF或Silverlight编写,你会想念.NET 4的哪些小功能(而不是像WCF/WPF这样的怪物)?我将开始列表......
ExtensionAttribute (不是在.NET 2中)Func<...>和Action<...>代表(不在.NET 2中)Tuple<...> (不是在.NET 3.5中)Lazy<T>和Lazy<T,TMetadata>(不是在.NET 3.5中)Reflection.Emit (缺少.NETCF;不是一个小功能,但我非常想念它)Theraot的图书馆
您可以使用使用Theraot.Core从Theraot的图书馆,以反向移植的.NET代码到原来的版本有很大一部分2.0的条件编译开始使用.NET.
在上述功能中,包括以下内容:
ExtensionAttributeFunc<...>和Action<...>代表们Tuple<...>Lazy<T> 和 Lazy<T,TMetadata>还包括以下问题中未提及的功能:
HashSet<T>SortedSet<T>ThreadLocal<T>IObservable<T> 和 IObserver<T>BigIntegerConcurrentDictionary<Tkey, TValue>注意:System.Threading.Tasks计划支持.
遗憾的是,在撰写本文时,只有很少的文档可用,但BCL行为的任何差异都可视为错误,可以通过github报告.