2011-11-10 10 views
26

I main.cs del mio progetto restituisce il seguente avviso:Attenzione “Il tipo di X nei conflitti Y.cs con il tipo X importata in Z.dll”

Attenzione 1 tipo 'Extensions. MessageDetails "in" PATH \ Extensions.cs "è in conflitto con il tipo importato" Extensions.MessageDetails "in" path \ lib.dll ". Utilizzando il tipo definito in 'path \ Extensions.cs'. path \ main.cs

Cosa c'è di sbagliato nel mio progetto? Come sbarazzarsi dell'avvertimento?

Il codice del mio progetto ha la seguente struttura:

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

Esistono due copie della classe delle estensioni (una inclusa nella DLL e una nel programma principale)? –

+1

sì, ho bisogno di usare 'MessageDetails' nella classe' Extensions' dello spazio dei nomi .. –

+2

Questo è il tuo problema, entrambi devono fare riferimento allo stesso. Prova ad aggiungerlo a una libreria di classi per farlo. –

risposta

17

Sembra Extensions.cs è sia parte del progetto che costruisce lib.dll e la tua main.exe

elimina da uno a risolvere questo problema.

+2

ty, per qualche ragione, vs ha aggiunto il mio progetto come riferimento. – Multinerd

4

Non è possibile avere due copie della classe estensioni, anche se il codice è lo stesso non sono viste come lo stesso oggetto. Sia la tua DLL che l'applicazione principale dovranno fare riferimento allo stesso identico.

Si potrebbe provare a creare libreria di classi di un 'Common Files' e aggiungere la classe estensioni ad esso, in questo modo sarete sempre utilizza la classe corretta

40

Nel mio caso, con Visual Studio 2013, ho scoperto che uno delle mie biblioteche di classe aveva sviluppato un riferimento a se stesso. Penso che sia successo quando ho aggiunto un nuovo progetto alla mia soluzione o si trattava di un bug, ma in entrambi i casi stava causando questo problema esatto.

Controllare i riferimenti del progetto per eventuali riferimenti circolari.

+0

Ho scoperto che questo è anche la causa di questo errore. Questo è abbastanza strano. –

+3

Ancora sembra essere un problema in vs 2015 come questo era il mio problema esatto. – Tom

+1

bello, questo ha risolto il mio problema – Mana

1

Ho riscontrato questo problema con un progetto ospitato anche su NuGet. Ho controllato tutti i riferimenti del progetto. Infine, il browser degli oggetti ha rivelato che la DLL di una versione precedente del mio pacchetto NuGet era in qualche modo caricata in Visual Studio dalla cartella della cache NuGet ("C: \ Users \ {username} \. Nuget \ packages"). Ho rimosso il pacchetto dalla cartella cache, è scomparso dal browser degli oggetti e tutto ha funzionato di nuovo bene.

6

Avevo questo tipo di problema in cui ero tornato da una versione di .NET Framework di destinazione da 4.5.2 a 4.0. Le classi nella mia cartella App_Code avevano metodi che chiamavano metodi in altre classi in quella cartella. Quando ho creato una cartella standard che ho chiamato "AppCode" e ho spostato le mie classi, non ho più avuto il problema. Se ho ricreato la cartella "App_Code" e ho rimesso in ordine le mie classi, ho riscontrato di nuovo questo problema. Sono convinto che abbia a che fare con la mia versione di .NET Framework o che Visual Studio non sia in grado di cambiarlo dopo essere stato inizialmente creato/indirizzato a un'altra versione.

1

Avevo un progetto condiviso, "Progetto A", incluso in "Progetto B" e "Progetto C."

"Progetto A" è stato aggiunto come un progetto condiviso in "Progetto B" e "Progetto C."

"Progetto A" comprendeva anche un riferimento tradizionale per "Progetto B"

Per risolve il problema, ho rimosso il riferimento al "Progetto B" da "Progetto a"

0

Se davvero bisogno di avere entrambe le classi dichiarate o riportati nel due dll separata, è possibile contrassegnare la classe come internal.

Tipi interni o membri s sono accessibili solo all'interno di file nello stesso assembly, quindi impedirà la collisione.

0

Ho avuto lo stesso problema. Solo una soluzione semplice per questo.

Controllare i riferimenti del progetto ci deve essere lo stesso riferimento del progetto. rimuovilo, funzionerà.

Problemi correlati