Tengo una clase como esta:
namespace Token1.Token2.Token3 { public class Class1 { } }Y otra clase como esta:
namespace Token2.Token4.Token5 { public class Class1 { } }La primera clase es parte de mi proyecto, la segunda clase es de una biblioteca de marco desarrollada por otro grupo dentro de mi organización. Observe que el espacio de nombres de la primera clase tiene Token2 en segundo lugar y el espacio de nombres de la segunda clase tiene Token2 en primer lugar.
El problema que tengo es que parece que no puedo hacer referencia a la segunda clase dentro de la primera debido a lo que parece una colisión de espacio de nombres. Si trato de hacer esto en la primera clase:
namespace Token1.Token2.Token3 { public class Class1 { var frameworkClass1 = new Token2.Token4.Token5.Class1(); } }el IDE de Visual Studio resalta Token4 en rojo y dice "No se puede resolver el símbolo 'Token4'". Si paso el mouse sobre Token2 donde estoy actualizando Class1, intellisense me muestra "espacio de nombres Token1.Token2", por lo que ve claramente el espacio de nombres de mi clase de proyecto y no ve el espacio de nombres de mi clase de marco.
Sería muy difícil cambiar el espacio de nombres de cualquiera de las bibliotecas de clases debido a la cantidad de código que ya existe. ¿Hay alguna manera de evitar esto?
Dado que Token2 también es un subespacio de nombres de Token1 , debe especificar que está buscando el espacio de nombres "raíz":
var frameworkClass1 = new global::Token2.Token4.Token5.Class1(); También podría crear un alias con una declaración de using :
using Token5 = global::Token2.Token4.Token5;Y luego simplemente haga referencia al alias:
var frameworkClass1 = new Token5.Class1();Puede probar global::Token2 para el espacio de nombres del marco