There is library A calling library B using a C# extension method.
I got a weird error from the C# compiler:
The type 'System.Windows.Forms.Control' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Windows.Forms, Version=4.0.0.0
None of the libraries A or B are dependent on System.Windows.Forms.Control, nor has any dependency of A a dependency on System.Windows.Forms.Control. System.Windows.Forms.Control is only referenced from another project in the same solution.
The weird thing is that if I change the call syntax to static method, it compiles successfully.
//static method syntax works fine
var leads = SourceLeadConfigurationHelper.GetLeads(enLeadSystem);
//extension method syntax cause error
//error The type 'System.Windows.Forms.Control' is defined in an assembly that is not referenced.
var leads = enLeadSystem.GetLeads();
The extension method looks like:
public static class SourceLeadConfigurationHelper
{
public static IList<ChannelID> GetLeads(this LeadSystem leadSystem);
public static IList<ChannelID> GetLeads(this SourceLeadConfiguration slc);
public static IList<ChannelID> GetLeads(LeadSystem leadSystem, bool throwException);
}
So you see there is no problem with detecting which extension to use. LeadSystem is an enum, SourceLeadConfiguration is a class.
I have Visual Studio 2013 update 5, .NET Framework 4.0.