Using Extension Methods in .NET 2.0 with Visual Studio 2008

I was working on a series of dialogs that required validation, and since there's a funky validation setup in place, I thought I might build up a nice extension library.  Noting that ASP.NET validation is far beyond Windows Forms, I thought it might also be a good opportunity to use extension methods.

Sadly, extension methods aren't supported by the C# 2.0 compiler (which I was using, part of Visual Studio 2005), nor are they supported by the .NET Framework 2.0.  So, I wouldn't get IntelliSense support, and it wouldn't build in VS 2005.  But I was curious, and since 2008 supports targeting the 2.0 framework, I thought I'd give it a shot.

So I cranked open 2008 and created a quick test project.  Building out the method: 

1: public static class ExtensionMethods

2: {

3: public static void ValidateMe(this Form form)

4: {

5: form.ValidateChildren(ValidationConstraints.Enabled);

6: }

7: }

I get a compiler error:

error CS1110: Cannot define a new extension method because the compiler required type 'System.Runtime.CompilerServices.ExtensionAttribute' cannot be found. Are you missing a reference to System.Core.dll?

So it appeared I would need to link to the 3.5 libraries... or would I? 

1: namespace System.Runtime.CompilerServices

2: {

3: [AttributeUsage(AttributeTargets.Method)]

4: public sealed class ExtensionAttribute : Attribute

5: {

6: public ExtensionAttribute() { }

7: }

8: }

Lo and behold, it compiled correctly.  Then it worked correctly!

net20Extension

(Note: I wouldn't really make a library with a function called "ValidateMe".  Never!)

This article is part of the GWB Archives. Original Author: Robert Paveza

New on Geeks with Blogs