2011-11-10 9 views
26

Los main.cs de mi proyecto devuelve la siguiente advertencia:Advertencia “El tipo X en los conflictos Y.cs con el tipo X importados en Z.dll”

Advertencia 1 Las extensiones de tipos. MessageDetails 'en' PATH \ Extensions.cs 'entra en conflicto con el tipo importado' Extensions.MessageDetails 'en' path \ lib.dll '. Usando el tipo definido en 'path \ Extensions.cs'. ruta \ main.cs

¿Qué pasa con mi proyecto? ¿Cómo deshacerse de la advertencia?

El código de mi proyecto tiene la siguiente estructura:

Extensions.cs

namespace Extensions 
{ 

    public class MessageDetails 
    { 
     public string message { get; set; } 
     public string link { get; set; } 
     public string picture { get; set; } 
     public string name { get; set; } 
     public string caption { get; set; } 
     public string description { get; set; } 
     public string userid { get; set; } 
     public string username { get; set; } 

     public object actions { get; set; } 
     public object privacy { get; set; } 
     public object targeting { get; set; } 
    } 

} 

lib.dll

namespace MyClassLib { 

    public class MyClassLibFoo { 
     public void foo(MessageDetails parameters) { 
      /* .. */ 
     } 
    } 

} 

main.cs

using MyClassLib; 
using Extensions; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     MessageDetails md = new MessageDetails(); 
    } 
} 
+0

¿Hay dos copias de su clase de extensiones (una empaquetada en su dll y otra en su programa principal)? –

+1

sí, necesito utilizar 'MessageDetails' en el espacio de nombres' Extensions' clase ... –

+2

Ese es su problema, ambos necesitan referenciar el mismo. Intente agregarlo a una biblioteca de clase para hacer esto. –

Respuesta

17

Parece que Extensions.cs es a la vez parte del proyecto que se construye lib.dll y su main.exe

quitarlo de uno a solucionar este problema.

+2

ty, por alguna razón, vs agregó mi proyecto como referencia. – Multinerd

4

No puede tener dos copias de la clase de extensiones, aunque el código sea el mismo, no se consideran el mismo objeto. Tanto su aplicación dll como la principal necesitarán hacer referencia exactamente a la misma.

Usted podría intentar la creación de biblioteca de clases de una 'Archivos comunes' y agregar la clase de extensiones para que, de esa manera usted estará siempre usando la clase

40

En mi caso, con Visual Studio 2013, me encontré con que uno de mis bibliotecas de clase había desarrollado una referencia a sí mismo. Creo que sucedió cuando agregué un nuevo proyecto a mi solución o era un error, pero de cualquier forma estaba causando este problema exacto.

Compruebe las referencias de su proyecto para cualquier referencia circular.

+0

Descubrí que esta es la causa de este error también. Eso es bastante extraño. –

+3

Todavía parece ser un problema en vs 2015 ya que este era mi problema exacto. – Tom

+1

nice, eso resolvió mi problema – Mana

1

Tuve este problema con un proyecto que también se aloja en NuGet. Revisé todas las referencias del proyecto. Finalmente, el navegador de objetos reveló que la DLL de una versión anterior de mi paquete NuGet se cargó de alguna manera en Visual Studio desde la carpeta de caché NuGet ("C: \ Users \ {username} \. Nuget \ packages"). Quité el paquete de la carpeta de caché, desapareció del navegador de objetos y todo funcionaba bien de nuevo.

6

Tuve este tipo de problema donde había revertido de una versión .NET Framework de 4.5.2 a 4.0. Las clases en mi carpeta App_Code tenían métodos que llamaban a métodos en otras clases en esa carpeta. Cuando creé una carpeta estándar que llamé "AppCode" y moví mis clases en ella, ya no tuve el problema. Si volví a crear la carpeta "Código_Ap_" y volví a mover mis clases, volví a tener este problema. Estoy convencido de que tenía que ver con mi versión de .NET Framework o que Visual Studio simplemente no funciona bien con el cambio después de haber sido inicialmente creado/dirigido a otra versión.

1

Tuve un proyecto compartido, "Proyecto A", que se incluyó tanto en "Proyecto B" como en "Proyecto C."Se añadió como un proyecto compartido en ""

" Proyecto A Proyecto B" y "Proyecto C."

"Proyecto A" también incluyó una referencia tradicional a "Proyecto B."

Para corrige el problema, me quita la referencia al "Proyecto B" de "Proyecto a"

0

Si realmente necesita tener ambas clases declaradas o referenciados en dos DLL independiente, puede marcar su clase como internal.

Tipos o miembros internos s solo se puede acceder dentro de los archivos en el mismo ensamblaje, por lo tanto, evitará la colisión.

0

Me había enfrentado el mismo problema. Solo una solución simple para eso.

Compruebe las referencias de su proyecto, debe haber la misma referencia del proyecto. solo elimínalo, funcionará.

Cuestiones relacionadas