Почему компилятор C # вставляет явную реализацию интерфейса?

Я столкнулся со странным крайним случаем C # и ищу хороший обходной путь.

Есть класс, который я не контролирую, который выглядит так:

namespace OtherCompany
{
    public class ClassIDoNotControl
    {
        public void SomeMethod(string argument)
        {
            Console.WriteLine((new StackFrame(1).GetMethod().Name));
        }
    }
}

Я хотел бы унаследовать от этого класса в классе яделать контроль. Кроме того, я хотел бы указать интерфейс на нем:

interface IInterfaceIDoControl
{
    void SomeMethod(string argument);
}

class ClassIDoControl : OtherCompany.ClassIDoNotControl, IInterfaceIDoControl
{
}

Если все эти файлы находятся в одной сборке, все отлично работает:

namespace MyCompany
{
    class Program
    {
        static void Main(string[] args)
        {
            IInterfaceIDoControl i = new ClassIDoControl();
            i.SomeMethod("Hello World!"); // Prints "Main"
        }
    }
 }

Но если я перенесу «ClassIDoNotControl» в другую сборку, я не получу то, что ожидал. Вместо этого я вижу «MyCompany.IInterfaceIDoControl.SomeMethod» для вывода, подразумевающего дополнительный кадр стека.

Причина в том, что под прикрытием компилятор C # меняет "ClassIDoControl", чтобы он выглядел так:

class ClassIDoControl : OtherCompany.ClassIDoNotControl, IInterfaceIDoControl
{
    void IInterfaceIDoControl.SomeMethod(string argument)
    {
        base.SomeMethod(argument);
    }
}

Есть ли способ избежать этого генерируемого компилятором дополнительного уровня косвенности с явно реализованными интерфейсами?