la fusión de archivos .dll con ILMerge no funciona

En primer lugar, no estoy seguro de si esto es un problema con ILMerge o no, pero no puedo fusionar archivos.dll en mi aplicación. Intenté esto en la línea de comando:

ilmerge /target:winexe /out:test.exe MyApp.exe lib1.dll lib2.dll lib3.dll

Recibí el siguiente error y no tengo idea de lo que significa:

Se informaron errores en los metadatos de MyApp. El pdb asociado con D: \ C # \ source \ bin \ ReleaseMyApp.exe no está actualizado.

Por cierto, estoy usando la última versión (2.10.526.0), pero sí, no puedo hacer que esto funcione y realmente necesito ayuda. ¿Qué significa el error anterior y cómo puedo solucionarlo?

preguntado el 08 de enero de 11 a las 18:01

¿Existen realmente archivos PDB? ¿Qué tal compilar a la versión de lanzamiento y eliminar cualquier PDB antes de llamar? ilmerge? -

Para ILMerge, lo uso como ilmerge /ndebug /target:winexe /out:test.exe app.exe lib1.dll lib2.dll. -

3 Respuestas

El pdb asociado con D: \ C # \ source \ bin \ ReleaseMyApp.exe no está actualizado.

Como no ha dicho explícitamente que ha comprobado que pdb y exes están sincronizados, supongo que haré la pregunta obvia: ¿hay un pdb en la carpeta y ha comprobado las marcas de tiempo en los archivos?

Según tengo entendido, si hay información de depuración disponible para los archivos de origen, ilmerge creará información de depuración para el destino y, si el original está desactualizado, probablemente muestre este error en lugar de generar información incorrecta.

Si no necesita la información de depuración, ¿qué sucede si elimina los archivos pdb?

Respondido el 08 de enero de 11 a las 22:01

Los archivos pdb estaban actualizados, simplemente los copié después de que la compilación tuvo éxito. También cuando lo borré parecía funcionar, aunque no es de extrañar que recibiera otro error, fantástico. "No se permite una referencia de ensamblado sin resolver: Microsoft.mshtml ..." Entonces, después de buscar un poco en Google, me di cuenta de que necesita especificar la ruta a la versión 4 de .NET Framework. Así que hice esto: ilmerge / targetplatform: v4, C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 /out:test.exe MyApp.exe lib1.dll lib2.dll lib3.dll Esperaría que funcione, pero no, sigo recibiendo el mismo error. - Iceyoshi

¿Intentó usar el archivo de configuración para forzar la ejecución de ilmerge con Framework 4? Ver research.microsoft.com/en-us/people/mbarnett/… - sgmoore

Espero que este tipo de metadatos se almacene como una cadena, quizás en código explícito, pero quizás a través de un "typeof" en un atributo.

Puede intentar manejar el evento TypeResolve de AppDomain, detectando la cadena de tipo que está fallando y devolviendo el tipo que desea; esto debería solucionar el hecho de que ahora está en un ensamblado diferente.

http://msdn.microsoft.com/en-us/library/system.appdomain.typeresolve.aspx

Respondido el 08 de enero de 11 a las 22:01

¿Ayudaría intentarlo? .NETZ en lugar de ILMerge?

Respondido el 08 de enero de 11 a las 22:01

No, porque probé ese programa y, por supuesto, no funciona. Usé: netz -s app.exe lib1.dll lib2.dll según el uso, pero obtengo un gran error cuando abro el .exe empaquetado. Eliminar los -s no hizo nada. No estoy seguro de si lo usé bien, ¿cuál es la sintaxis adecuada para usar en la línea de comandos? - Iceyoshi

Lo uso como netz -s -z -w app.exe lib1.dll lib2.dll -so - Uwe Keim

Acabo de probar la sintaxis anterior y recibí 2 advertencias:! Advertencia: 1001 ¡No se pueden procesar los metadatos del ensamblaje! ! Advertencia: 1005 ¡No se puede procesar la información de la licencia de ensamblaje! Aparte de eso, creo que todo salió bien, pero ejecutar el .exe empaquetado no funciona y muestra alguna excepción en un MessageBox. - Iceyoshi

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.