«Пакет совместимости» для резервного копирования новых функций .NET Framework?

По разным причинам я часто считаю желательным написать код, совместимый с .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 и Lazy . Кстати, если вы хотите использовать LINQ в .NET 2.0, вы можете использовать LinqBridge .

Теперь предположим, что вы сделали ExtensionAttribute общедоступным, чтобы другие сборки, которые вы пишете, могли его использовать. Сначала это нормально, но что, если вы затем захотите использовать стороннюю библиотеку, в которой также была такая же идея? Вы добавляете ссылку на эту библиотеку, и теперь у вас есть конфликт имен. Упс.

Я также заметил, что некоторые новые библиотеки доступны только для .NET 4.0 или 3.5, хотя они имеют лишь незначительные зависимости от него, которые можно решить с помощью пакета совместимости или LinqBridge.

Это было бы неплохо. если бы существовали «пакеты совместимости» для более старых версий .NET, которые определяли эти маленькие функции в небольшой DLL, которые вы могли бы оправдать включение в проекты любого размера. Такое существует?

Обновление : Судя по тишине, такого нет. Я мог бы сам сделать такую ​​библиотеку OSS, если есть интерес. Итак, мой новый вопрос: какие меньшие функции .NET 4 (в отличие от таких монстров, как WCF / WPF) вы бы упустили, если бы вы писали для .NET 2, .NET 3.5, .NETCF или Silverlight? Я начну список с ...

  • ExtensionAttribute (не в .NET 2)
  • Func <...> и Action <...> делегаты (не в .NET 2)
  • LINQ-to-объекты (не в .NET 2)
  • Кортеж <...> (не в .NET 3.5)
  • Ленивый и Lazy (не в .NET 3.5)
  • Деревья выражений (не в .NET 2; неполные в .NET 3.5)
  • Вариант универсальности (существует в .NET 2 но недоступен в C # 3 и VB 9)
  • Reflection.Emit (отсутствует в .NETCF; не совсем маленькая функция, но мне ее очень не хватает)

14
задан 3 revs 12 August 2010 в 18:53
поделиться

2 ответа

Я не знаю, насколько полезным будет такой список, поскольку он потенциально чудовищен по размеру. CLR одинаков для версий 2.0, 3.0 и 3.5, поэтому технически любая из этих функций, вышедших после 2.0, может быть включена в «пакет совместимости».

-Oisin

0
ответ дан 1 December 2019 в 15:21
поделиться

На самом деле это не "пакет совместимости" , но поскольку вы упомянули LinqBridge... еще одна «функция резервного копирования», которую я часто использую, — это параллельные расширения, найденные (среди прочего) в реактивных расширениях (Rx) для Framework 3.5 SP1. (в System.Threading.dll). Он включает полную реализацию библиотеки параллельных задач и параллельного LINQ (PLINQ).

Для .Net 4.0 существует пакет Async Targeting Pack для Visual Studio 2012 (nuget) от Microsoft. Который предоставляет множество методов расширения Async и обеспечивает поддержку ключевых слов async/await при использовании компилятора C# 5.

Аналогично для .Net 3.5 существует AsyncBridge, который основан на библиотеке TPL Reactive Extentions для обеспечения асинхронного/ожидания. Существует также версия AsyncBridge для .Net 4.0, но я не уверен, почему вам нужна именно эта, а не версия от Microsoft.

3
ответ дан 1 December 2019 в 15:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: