2010-07-01 32 views
9

Estoy recibiendo el siguiente error:"Un montaje con el mismo nombre sencillo ya se ha importado" error sin referencia duplicado

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.

Todo lo que he visto dice que estoy hacen referencia a dos conjuntos con el mismo nombre y necesito eliminar uno de ellos. Sin embargo, lo he verificado y solo lo estoy haciendo referencia una vez.

Esto también solo ocurre cuando estoy usando msbuild para compilar desde la línea de comando en mi cuadro dev. Si compilo a través de Visual Studio o hago una compilación limpia en nuestro servidor de CI, no veo este error.

He intentado eliminar por completo toda mi fuente y construcción desde cero para parecerme más a la máquina de compilación, pero no tuve suerte.

+1

Publique la línea de comando csc.exe para ese proyecto. –

+0

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

Respuesta

7

¡Parece que no puedo leer hoy!
El proyecto tenía una referencia a Interop y una referencia COM que generó la "misma" interoperabilidad. Entonces hubo dos y simplemente no busqué muy bien. Todavía no entiendo por qué funcionó en otros lugares pero esto lo solucionó.

+1

+1 - Gracias - este error acaba de aparecer de la nada hoy y tuve exactamente el mismo problema –

2

Si se trata de un proyecto web, ¿hay referencias fuertes a la otra versión allí? Esos no aparecerán como una dependencia del proyecto, pero causarán un error en tiempo de ejecución como usted describe. Espero que ayude

1

Tuve este problema pero en mi caso, tuve una copia antigua en la carpeta actual para el EXE cargando mi componente, que se cargó junto con el actual, que se cargó a mano desde la carpeta de proyectos. Eliminar esa vieja copia resolvió mi problema.
Utilicé Depuración> Windows> Módulos ventana para ver qué módulos se cargaron en ese momento y eso resolvió mi problema.

0

Para otros frente a mí: si compila a través de la línea de comando utilizando la propiedad AssemblyName, sobrescribirá todos los ensamblados generados por todos los proyectos de solución; en otras palabras, terminará con ensamblajes (N -1) denominados iguales donde N es el no. de proyectos - el de inicio (que generalmente generará un exe).

Esto ocurre porque todas las propiedades de la línea de comandos de compilación son globales y sobrescriben cualquier configuración específica del proyecto. Ver this y this.

Desde el MSDN link mencionado anteriormente:

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.

En mi caso concreto, donde Jenkins es la herramienta de CI, que terminó la adición de un comando por lotes ventanas al final para cambiar el nombre del .exe sólo a lo que me originalmente previsto al pasar el parámetro AssemblyName.

Cuestiones relacionadas