2012-08-01 53 views
6

Estoy desarrollando un # aplicación Silverlight C, y he añadido una referencia a una DLL de Microsoft y obtuvo el siguiente mensaje:El Type XX existe en ambos archivos DLL

existe El tipo en ambos DLL

Dado que estoy usando un control que está definido en las dos DLL (una está asociada con el SDK, la otra me agregué).

Después de hacer algunas investigaciones en Internet, traté de hacer un alias de ambas DLL e importarlas usando extern alias <alias_name>. Este enfoque resolvió algunos problemas en el código xaml.cs detrás, pero realmente no resolvió el problema en xaml. Después de hacer esto, Visual Studio se quejó de que uno de los controles (de la DLL que agregué) no está definido en el espacio de nombres.

Entonces, me pregunto si hay una forma de especificar el espacio de nombres en XML usando un alias?

Gracias.

+0

está desarrollando un control con el samespace _same utilizado por el framework_, es eso? ¿Por qué? – devundef

+0

No, no estoy desarrollando pero usando un control que está definido en dos DLL que estoy usando. –

Respuesta

4

Stackoverflow

MSDN

sólo tiene que añadir un segundo alias para su montaje con delimitadores de coma.

por ejemplo

<Aliases>global,alias_name</Aliases> 

XAML utilizará el alias global, y se puede escoger y elegir en sus clases.

.

Si es necesario utilizar los dos conjuntos en un solo lugar, I think this solution is the only one.

Básicamente, crea dos clases de envoltura en espacios de nombres separados en su propio proyecto para cada clase requerida, después hacer referencia a los espacios de nombres de contenedor en lugar de las asambleas en conflicto.

+0

Hola Gracias, probé este enfoque, pero no parece resolver el problema para mí. El elemento de control xaml (vamos a llamar al control 'LL') está definido en ambos dlls, así que quiero hacer algo como especificar el control' LL' que utilicé en xaml es de uno de los dlls pero no del otro, ya que no Creo que tengo otra oportunidad de especificar el espacio de nombre del control. Gracias –

+0

Encontré una alternativa ... –

+0

Esto parece ser un poco hacky, ¡pero gracias! –

2

No es una buena manera si se utiliza la clase de namespae duplicada en código C# (no en XAML) http://csc-technicalnotes.blogspot.ru/2009/07/type-exists-in-both-dlls.html

utilizar un alias de montaje externo. Especifique la propiedad "Aliases" de la referencia DLL.

  1. En Visual Studio Solution Explorer, abra la carpeta Referencias.
  2. Haga clic con el botón derecho en la referencia de DLL, seleccione Propiedades
  3. Ingrese el valor de alias en la propiedad "Aliases".
  4. Ejemplo: Alias ​​a la referencia MyDLLv1.dll podría ser "LegacyMyDLL".

Especificar alias en código fuente C#:

// Old way 
using MyNamespace; 

// New way 
extern alias LegacyMyDLL; 
using LegacyMyDLL.MyNamespace; 
Cuestiones relacionadas