"兼容包"用于向后移植新的.NET Framework功能?

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中)
  • LINQ到对象(不在.NET 2中)
  • Tuple<...> (不是在.NET 3.5中)
  • Lazy<T>Lazy<T,TMetadata>(不是在.NET 3.5中)
  • 表达式树(不在.NET 2中;在.NET 3.5中不完整)
  • 泛型方差(存在于.NET 2中,但无法从C#3和VB 9中访问)
  • Reflection.Emit (缺少.NETCF;不是一个小功能,但我非常想念它)

The*_*aot 5

Theraot的图书馆

您可以使用使用Theraot.CoreTheraot的图书馆,以反向移植的.NET代码到原来的版本有很大一部分2.0的条件编译开始使用.NET.

在上述功能中,包括以下内容:

  • ExtensionAttribute
  • Func<...>Action<...>代表们
  • LINQ到对象
  • Tuple<...>
  • Lazy<T>Lazy<T,TMetadata>
  • 表达发辫

还包括以下问题中未提及的功能:

  • HashSet<T>
  • SortedSet<T>
  • ThreadLocal<T>
  • IObservable<T>IObserver<T>
  • BigInteger
  • ConcurrentDictionary<Tkey, TValue>
  • 等等...

注意:System.Threading.Tasks计划支持.

遗憾的是,在撰写本文时,只有很少的文档可用,但BCL行为的任何差异都可视为错误,可以通过github报告.