2010-08-14 10 views
5

Tengo básicamente el mismo problema que esta pregunta: Embed multiple icons in WPF EXEincrustar automáticamente múltiples iconos en un .NET ejecutable

Mi aplicación Windows Forms .NET 2.0 tiene actualmente esta al hacer clic en "Cambiar icono" en el explorador:

EVEMon Single Icon http://www.richard-slater.co.uk/wp-content/uploads/2010/08/EVEMonIconsWhatIHave.png

lo que me gustaría ver, y con un poco de piratería sobre como se sugiere en el artículo anterior me sale esto:

EVEMon Multiple Icons http://www.richard-slater.co.uk/wp-content/uploads/2010/08/EVEMonIconsWhatIWant.png

Sin embargo, se pierde el proceso de obtener toda la información de versión para el ensamblaje. Necesito mantener la información de la versión en el ensamblaje ya que mi proceso de actualización automática se basa en esto para identificar la versión instalada de la aplicación.

También construyo la aplicación a través de un proceso de integración continuo, por lo que preferiría no tener ningún paso que requiera intervención manual, ¿es posible de forma automática?

+1

No añadir iconos como los recursos son suficientes? – Joey

+0

Agregar los iconos como un recurso .NET (.resx) no los hará disponibles para Windows Explorer. –

Respuesta

7

Acabo de crear una herramienta simple para hacer exactamente esto sin tener que meterme con los archivos .res. Es una pequeña utilidad que puede usar como parte de su evento Post-Build y le permite agregar todos los archivos de iconos en una carpeta particular a su ensamblaje. Si asumimos que usted tiene una carpeta de iconos en su carpeta de proyecto principal puede agregar el siguiente evento posterior a la generación:

C:\path\to\InsertIcons.exe $(TargetPath) $(ProjectDir)icons 

Una descripción más detallada y una descarga se puede encontrar en http://einaregilsson.com/add-multiple-icons-to-a-dotnet-application/

+1

Dulce. Agradezco especialmente que InsertIcons sea de código abierto y en [github] (https://github.com/einaregilsson/InsertIcons). – ulatekh

+0

Gracias por la utilidad. Funciona de maravilla. – DonBoitnott

2

Este Code Project article tiene un tutorial sobre cómo hacer esto.

Básicamente agregas más recursos de iconos al proyecto.

+0

Parece prometedor, mañana tendré que ir a ver si esto hace todo lo que necesito. –

+0

Ese artículo no resuelve sus problemas de control de versiones, parece impedir que el manifiesto se incruste. – insipid

3

El artículo mencionado por ChrisF también borrará la información de la versión de su conjunto. Una vez que sigas esa guía, deberías intentar usar el método de creación posterior que se describe aquí http://blogs.msdn.com/b/cheller/archive/2006/08/24/718757.aspx para insertar el manifiesto.

EDIT:

Es "Método # 2 - El "" Enfoque (usando Mt.exe)" Genérico

+0

Gracias por investigar más sobre esto, echaré un vistazo a la guía de CodeProject y al blog para ver si puedo crear un proceso automatizado. –

1

Para mí la solución más sencilla a este problema es crear un archivo .res, que incluye solo los iconos que necesita (y los almacena en su orden preferido), deshabilita un ícono principal en las propiedades del proyecto y fusiona el paquete de íconos previamente preparado (archivo .res) con su archivo .exe final, haciéndolo en un evento posterior a la compilación. Aunque, si este proceso puede automatizarse completamente y mantener sus datos de manifiesto sin cambios, necesita en el último paso una herramienta externa (ResHacker), que le permite hacer un trabajo de fusión de archivos .res a través de la línea de comandos (por supuesto, Visual Studio puede hacer esto, pero hasta donde sé, no hay una interfaz de línea de comando para lograrlo; si me equivoco, corrígeme).

  1. Descargar un archivo .res en blanco (http://www.codeproject.com/Tips/160885/How-to-Embed-Multiple-Icons-and-Color-Animated-Cur.aspx) y agregarlo a su archivo de proyecto

  2. Rellene .res añadido previamente con sus iconos

  3. en Eliminar el icono principal de su proyecto (Proyecto -> Propiedades)

  4. Descargar una herramienta deResHacker (http://www.angusj.com/resourcehacker/) y colocarlo donde quieras

  5. Añadir línea similar a su evento posterior a la generación:

    if $(ConfigurationName) == Release (
        ..\..\..\..\..\Tools\ResHack\ResHacker.exe -add $(TargetPath), $(TargetPath), $(ProjectDir)Properties\AssemblyWin32.res ,,, 
    ) 
    

eso es todo.Cada vez que compile su proyecto en modo Release, obtendrá un ícono deseado en su archivo .exe de destino.

+0

¿Mantiene esto el manifiesto de la aplicación? –

+0

Sí, lo hace. Además, la herramienta ResHacker le permite controlar toda la información de recursos incluida en su archivo .exe, p. en lugar de fusionar otro archivo .res, puede simplemente agregar un ícono o reemplazarlo, lo que quiera hacer. Tenga en cuenta que una característica principal de esta herramienta es la usabilidad de la línea de comando. –

Cuestiones relacionadas