title: Why can't VB.Net find an extension method on an interface?
body: <p>I have a C# library that has an extension method, something like:</p>
  
  <pre><code>public interface ISomething { ... }
  public class SomethingA : ISomething { ... }
  public class SomethingB : ISomething { ... }
  
  public static class SomethingExtensions 
  {
      public static int ExtensionMethod(this ISomething input, string extra) 
      {
      }
  }
  </code></pre>
  
  <p>The extension works fine if called from C#, but has an issue if called from an external VB.Net application:</p>
  
  <pre><code>Dim something = Me.SomethingManager.GetSomething(key)
  Dim result = something.ExtensionMethod("extra")
  </code></pre>
  
  <p>This compiles fine but throws an exception at run time:</p>
  
  <blockquote>
    <p>Public member 'ExtensionMethod' on type 'SomethingB' not found.</p>
  </blockquote>
  
  <p>If the VB.Net is changed to explicitly make the type the interface it works:</p>
  
  <pre><code>Dim something as ISomething = Me.SomethingManager.GetSomething(key)
  Dim result = something.ExtensionMethod("extra")
  </code></pre>
  
  <p>Why? Why does the extension method work on the interface but not the class that implements it? Would I have the same issue if I used a subclass? Is VB.Net's implementation of extension methods incomplete?</p>
  
  <p>Is there anything I can do in the C# library to make VB.Net work without the explicit interface?</p>