Extension Method là điểm mới của .NET 3.0+, nếu bạn sử dụng trong .NET 2.0 với Visual Studio thì bạn sẽ được “tặng” lỗi liền :

Extension Methods on .Net 2.0 - error

Extension Methods sau khi compile thì thực chất chỉ là static methods, tuy nhiên để giúp IDE (Visual Studio) có thể nhận biết được static methods nào là extension methods để cho IDE có thể biết được kiểu dữ liệu nào có extension method nào (giúp IDE có list ra các hàm, cũng như không báo lỗi và compile được khi viết theo cú pháp của extension methods), compiler đã thêm attribute: ExtensionAttribute cho các static method (cũng như static class và assembly chứa nó) là extension methods. Thật không may, cái attributes này lại nằm trong System.Core.dll component (.Net 3.5 - cũng phải thôi, M$ không thể thêm cái attribute mới này vào trong các component đã được publish của .Net 2.0 được), vì thế khi chúng ta sử dụng Extension Methods cho project .net 2.0 sẽ nhận được thông báo lỗi như trên.

Tuy nhiên cũng thật may mắn vì khi thêm attribute ExtensionAttribute cho các static methods, compiler đã không chỉ rõ attribute này nằm ở component nào:

ExtensionAttribute

Vì thế chúng ta chỉ cần thêm attribute này vào project của mình:

namespace System.Runtime.CompilerServices
{
    /// 
    /// Indicates that a method is an extension method,
    /// or that a class or assembly contains extension methods.
    /// 
    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly)]
    public sealed class ExtensionAttribute : Attribute
    {
    }
}