2009-11-27 12 views
28

En el proceso de compilación para una herramienta .NET C#, he estado usando ILMerge para fusionar los ensamblados en un solo exe.ILMerge DLL: El ensamblado no se combinó correctamente, aparece como una referencia externa

Agregué recientemente una nueva biblioteca de clases, y ahora ILMerge está fallando. ¡Me he acordado de decirle que se fusione en la nueva DLL!

Ahora me está dando este error, que yo no entiendo muy bien:

ILMerge.Merge: El conjunto 'DataObjects' no se fusionó en correctamente. Todavía aparece como una referencia externa en el ensamblaje de destino.

Todas las referencias de ensamblaje que he hecho utilizando referencias de 'proyecto', y no ha fallado en el pasado.

¿Alguien puede explicarme este error o sugerir una solución por favor?

+0

¿Te dice el ensamblaje de la fuente? ¿O puede usar el reflector .Net para encontrar eso? –

+0

Literalmente solo muestra la línea de arriba. Algunos de los ensamblajes que intento fusionar hacen referencia al ensamblado 'DataObjects', pero este ha sido el caso durante bastante tiempo, y solo cuando agrego un nuevo ensamblado que hace referencia a él, aparece el error anterior. –

+1

¿Encontró una solución a este problema? – loraderon

Respuesta

34

Tuve que usar el argumento /closed. De acuerdo a los documentos oficiales:

Cerradas

Cuando se establece antes de llamar Merge, entonces el "cierre transitivo" de los ensambles de entrada se calcula y se añadió a la lista de los módulos de entrada. Un conjunto de se considera parte del cierre transitivo si se referencia, ya sea directa o indirectamente, de uno de los originalmente conjuntos de entrada especificados y tiene una referencia externa a uno de los conjuntos de entrada , o uno de los ensamblajes que tienen dicha referencia. complicado, pero eso es la vida ...

3

Tengo un mensaje de error similar al intentar publicar una aplicación web que se fusionó todas las salidas a un solo conjunto:

Se produjo un error cuando la fusión de las asambleas : ILMerge.Merge: el conjunto de destino se enumera a sí mismo como una referencia externa.

Esto ocurre si el nombre del ensamblado que está fusionando coincide con el nombre del ensamblado de la aplicación web en Properties > Application. Cambiar el nombre del conjunto de salida debería arreglarlo.

+0

¡Gracias por esto! –

Cuestiones relacionadas