2010-07-01 6 views
9

sto ottenendo il seguente errore:"Un gruppo con lo stesso nome semplice è già stato importato" errore senza riferimento duplicato

error CS1704: An assembly with the same simple name 'Interop.xxx.dll, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null has already been imported. Try removing one of the references or sign them to enable side-by-side.

Tutto quello che ho visto dice che sto riferimento a due gruppi con lo stesso nome e ho bisogno di rimuovere uno di loro. Tuttavia, ho controllato e sto facendo riferimento solo una volta.

Questo accade anche quando sto usando msbuild per compilare dalla riga di comando sulla mia casella di sviluppo. Se creo tramite Visual Studio o eseguo una compilazione pulita sul nostro server CI, non vedo questo errore.

Ho provato a rimuovere completamente tutta la mia fonte e costruire da zero per assomigliare più da vicino alla macchina di costruzione, ma senza fortuna.

+1

Registrare la riga di comando csc.exe per quel progetto. –

+0

https://stackoverflow.com/questions/28730100/visual-studio-2015-debugging-cant-expand-local-variables/28838720#28838720 – iTachi

risposta

7

Quindi sembra che non posso leggere oggi!
Il progetto aveva un riferimento a Interop e un riferimento COM che generava lo "stesso" interop. Quindi ce n'erano due e io non ho cercato molto bene. Ancora non capisco perché ha funzionato in altri posti, ma questo ha risolto il problema.

+1

+1 - Grazie - questo errore è appena spuntato su di me fuori dal nulla oggi e ho avuto esattamente lo stesso problema. –

2

Se si tratta di un progetto Web, ci sono dei riferimenti con nome sicuro all'altra versione? Quelli non verranno visualizzati come dipendenza del progetto, ma causeranno un errore di runtime come descrivi. Spero che questo aiuti

1

Ho avuto questo problema ma nel mio caso, ho avuto una vecchia copia inserita nella cartella corrente per l'EXE che carica il mio componente, che è stato caricato insieme a quello corrente, che è stato caricato a mano dalla cartella dei miei progetti. Cancellare quella vecchia copia ha risolto il mio problema.
Ho usato Debug> Finestra Windows> Moduli per vedere quali moduli sono stati caricati in quel momento e questo ha risolto il mio problema.

0

Per gli altri come me: se si costruisce tramite riga di comando utilizzando la proprietà AssemblyName, sovrascriverà tutti gli assembly generati da tutti i progetti di soluzione, in altre parole, si finirà con (N -1) gli assembly denominati uguali dove N è il no. di progetti - quello di avvio (che genericamente genererà un exe).

Ciò accade perché tutte le proprietà della riga di comando di creazione sono globali e sovrascrivono qualsiasi impostazione specifica del progetto. Vedi this e this.

da MSDN link menzionati sopra:

Global properties are properties that are set by using the /property switch on the command line, or properties that are set by the integrated development environment (IDE) before a project is built. These global properties are applied to all projects that are built by using this Engine.

Nel mio caso specifico, in cui Jenkins è lo strumento CI, ho finito per l'aggiunta di un comando di Windows lotto alla fine per rinominare il file exe solo per quello che ho originariamente previsto quando si passa il parametro AssemblyName.

Problemi correlati