There's no end of blog posts describing the workaround - add your own ExtensionAttribute class to get it working - but all the samples are in C# (which is interesting in of itself). So here's the VB.Net version:
<AttributeUsage(AttributeTargets.Method Or AttributeTargets.Assembly Or AttributeTargets.Class)> _
Public Class ExtensionAttribute
...and why am I bothering to blog about this rather trivial conversion? Because of the key gotcha: make sure you put this in a project with no root namespace set:
That had me banging my head on the table for too long.
As did the next one: extension methods only show up under the 'All' tab in IntelliSense - obviously too advanced for mere Morts. I gotta remember to turn that off: using VB is bad enough without the IDE patronising you as well.
Interestingly, if you get the AttributeUsage declaration wrong on the attribute, you get this error:
"The custom-designed version of System.Runtime.CompilerServices.ExtensionAttribute ... is not valid"
Fascinating. So this hackery works by design, it's just not really supported as such.
More reading: MSDN documentation on Extension Methods in VB