2009-07-01 13 views
12

Por curiosidad, he creado 2 conjuntos que tienen una clase (Class1) con el mismo espacio de nombres (Library1). Luego creo otro cliente haciendo referencia a esos dos ensamblajes e intento crear una instancia de Class1.Use tipos del mismo nombre y espacio de nombre en 2 ensamblados .NET

El compilador, como es lógico, me da un error de compilación sobre la referencia ambigua. ¿Hay alguna manera de especificar explícitamente el tipo en el ensamblaje que quiero usar para evitar la ambigüedad?

Nota: Sé que esto rara vez ocurre en la práctica. Es solo una pregunta por curiosidad sobre la función de idioma.

Respuesta

10

Creo que debería usar un extern alias para envolver los espacios de nombres del ensamblado fuera del espacio de nombres Global. He aquí cómo:

  1. En el proyecto que hace referencia a las asambleas 2, seleccionar uno de ellos bajo referencias, y en la ventana Propiedades de cambiar el valor de Alias ​​global a, por ejemplo, global, Library1a.

  2. Haz lo mismo con la otra referencia, pero dale un alias diferente - vamos con global, Library1b para nuestro ejemplo.

  3. Inserte extern alias Library1a; y/o extern alias Library1b; como las primeras 2 líneas de las clases que consumen los conjuntos.

  4. Al acceder a miembros ambiguos, califique el espacio de nombres con Library1a. o Library1b.. Ejemplos: Library1a.Library1.Class1...Library1b.Library1.Class1...

1

Ocurre en la práctica y es un verdadero dolor, el alias externo no siempre puede resolver el problema. Aquí hay un ejemplo de dónde es un problema Duplicate Namepsaces.

Cuestiones relacionadas