2009-03-06 15 views
14

Me he encontrado con el escenario poco probable cuando hago referencia a dos ensamblajes externos que tienen el mismo nombre y nombres de tipo. Cuando trato de usar el tipo, el compilador arroja un error que no puede resolver cuál quiero usar.¿Cómo hacer que el operador alias del espacio de nombres :: funcione bajo C#?

Veo que C# ofrece un mecanismo para usar alias para las referencias. Incluso puede especificar estos alias a través de la ventana Property de una referencia en Visual Studio 2008. ¿Cómo uso este alias en mi código? Según tengo entendido, que debería usar el operador ::, pero falla con el siguiente error:

CS0432 - Alias not found

El . operador habitual falla también.

En la ventana de salida veo que el compilador obtiene el alias pasado correctamente en su línea de comandos.

Cualquier sugerencia sobre lo que podré probar a continuación es muy apreciada.

+0

"El operador no es habitual también." puedes expandirte en este? SÍ FUNCIONA si escribe todo el espacio de nombres – Grzenio

Respuesta

16
extern alias alias1; 
using alias1::Namespace; 
+0

Esto se puede utilizar para un método de solución alrededor de CS0433 (error del compilador de C#). http://msdn.microsoft.com/en-us/library/64wh5743(VS.100).aspx – RandomNickName42

+0

Me acabo de dar cuenta, es 1 número de error de la pregunta de "Gortok" aquí, gracioso. – RandomNickName42

+2

Y, también debe cambiar la propiedad de referencia de conjunto 'Alias' de "global" a "global, alias1". – Spiralis

3

Prueba esto:

extern alias asm1; 
extern alias asm2; 

namespace Client 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      asm1.MyNs.MyClass mc1 = null; 
      asm2.MyNs.MyClass mc2 = null; 
     } 
    } 
} 

Y añadir global,asm1 a la referencia del proyecto de Asamblea1 y global,asm2 para assembly2

3

creo que es necesario utilizar un alias extern. Anson Horton tiene un buen blog sobre este problema y cómo usar extern alias para solucionarlo.

-1

Cuando hace referencia a algún conjunto en el proyecto, tiene el alias predeterminado "global". Cuando agrega otro alias para ese ensamblaje, p. "Global, AssemblyA", se hará referencia a ello como esto:

using SomeTypeAlias = AssemblyA::Company.Product.SomeType; 

o:

void SomeMethod(AssemblyA::Company.Product.SomeType someType) { ... } 
Cuestiones relacionadas