¿Por qué el comstackdor cuando usa una sobrecarga en otro ensamblaje a veces requiere que también haga referencia a un subconjunto?

Hay bastantes preguntas / respuestas sobre el error del comstackdor que se mencionan a continuación y cómo resolverlo, pero la pregunta aquí es acerca de algunas ideas por qué, en este caso, esto es necesario.

¿Por qué un proyecto A que usa una sobrecarga de un método de otro proyecto referenciado B, que usa un objeto del proyecto C en una de sus firmas sobrecargadas, requiere que haga referencia al proyecto C del proyecto A, incluso si nunca usa el objeto desde proyecto c?

Supongo que debe tener que ver con la resolución de qué sobrecarga usar, pero me gustaría entender el concepto detrás.

Aquí hay un ejemplo:

Poner cada una de las clases en una asamblea propia.

//Put into Assembly C public class C {} //Put into assembly B, reference C public class B { public static void Test(string param) //Simple method with one string parameter { } public static void Test(C param) //Overload which uses type of assembly C { } } //Call placed in method of assembly A which uses and references only assembly B, but not C B.Test("TestString"); // fails to compile, CS0012 

CS0012 El tipo ‘C’ se define en un ensamblaje al que no se hace referencia. Debe agregar una referencia al ensamblado ‘C, Versión = 1.0.0.0, Cultura = neutral, PublicKeyToken = null’.

Puede obtener resultados interesantes cuando juega con las sobrecargas del conjunto B, porque no todas las combinaciones producen el error:

 public static void Test(){} public static void Test(C param){} B.Test(); //Call from assembly A compiles 

Otro ejemplo:

 public static void Test(string param){} public static void Test(C param, int param2){} B.Test(""); //Call from assembly A compiles 

Otro ejemplo más:

 public static void Test(string param, string param2){} public static void Test(C param, int param2){} B.Test("",""); //Fails, CS0012 

Por lo tanto, es probable que esto tenga que ver cómo se realiza la resolución de sobrecarga. Sin embargo, no entiendo por qué el comstackdor no puede simplemente trabajar para subir el árbol de dependencias y me obliga a hacer una referencia directa. ¿No tendría que hacerse la resolución de sobrecarga en el assembly B de todos modos?