Использование методов расширения с .NET Framework 2.0 - PullRequest
6 голосов
/ 23 апреля 2009

Под Visual Studio 2008
Могу ли я создать метод расширения для работы с проектом .NET Framework 2.0?

Ответы [ 2 ]

10 голосов
/ 23 апреля 2009

Существует безобразный хак , который заставляет методы расширения работать в .Net 2.0; но было бы лучше просто обновить ваш фреймворк до 3.5.

Альтернативные источники: 1 , 2 .

Вкратце (из ссылки № 2): Методы расширения - это просто обычные статические методы, помеченные атрибутом [Extension]. Этот атрибут фактически добавляется компилятором за кулисами. В .NET 3.5 он находится в System.Core, поэтому просто определите свой собственный атрибут следующим образом:

namespace System.Runtime.CompilerServices
{
  [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
  public class ExtensionAttribute : Attribute
  {
  }
}
2 голосов
/ 23 апреля 2009

Абсолютно. Есть несколько хакерских методов, но я использую метод взятия System.Core из Mono проекта , добавив весь его код в новую библиотеку классов .NET 2.0 с именем System.Core в моем собственное решение и перекомпилируйте его. Есть несколько вещей, которые нужно исправить, например, изменить их атрибуты MonoTODO на комментарии TODO и исправить AssemblyInfo.cs, но это прекрасно работает. Сейчас я использую методы LINQ и расширения в проекте 2.0, скомпилированном в VS 2008.

Предполагая, что вы получите версию Mono версии 2.4, вы должны найти код в:

<extracted directory>/mono-2.4/mcs/class/System.Core

Если вы застряли в VS 2005, вы можете скачать SharpDevelop , собрать dll System.Core с этим целевым значением 2.0, добавить ссылку на скомпилированную сборку, и она может работать, но я не знаю, будет ли VS 2005 иметь проблемы с синтаксисом расширения или нет. Я полагаю, это даст вам немного губ.

...