Sobre la base de las respuestas, que Ya veo, parece ser bastante trivial, pero desafortunadamente no es tan simple.
Vamos a empezar desde el archivo .rc - se puede escribir rápidamente archivos de esta manera: myown.rc:
1 ICON "..\\Folder1\\icon1.ico"
2 ICON "..\\folder2\\icon2.ico"
1 24 "myown.manifest"
Pero la próxima pregunta - dónde obtener el archivo de manifiesto que se necesita para su aplicación.
Es posible extraer el archivo de manifiesto utilizado actualmente, el uso de línea de comandos de la siguiente manera:
mt -inputresource:myOwnNetExe.exe;#1 -out:myown.manifest
Y entonces usted puede utilizar que se manifiestan con su ejecutable .NET.
Pero esto no es todo. Desde el proyecto en sí no puede especificar la ruta relativa a su archivo .res, solo puede usar la ruta absoluta. Guarde .csproj y edítelo manualmente con el bloc de notas, para hacer que la ruta sea relativa. El proyecto compila bien después de eso.
Pero en svn/git - probablemente no ponga el archivo .res - solo el código fuente. Necesitas compilar .rc a .res.
Lo mejor es hacerlo en el paso de proyecto/preconstrucción.
Pero, por supuesto, no se puede iniciar rc.exe, ya que es un proyecto de C++, y tenemos un proyecto de C# que no se preocupa por los patrones de proyecto de C++.
Esto se puede usar walkarounded etapa de pre-construcción como esta:
cd $(ProjectDir)
call "%VS100COMNTOOLS%\vsvars32.bat" >nul
rc /c 1252 /nologo myown.rc
Cuando es necesario cambiar VS100COMNTOOLS con Visual Studio con la que se está compilando (estoy usando Visual Studio 2010).
Y esto todavía no es todo. Si desea cambiar el icono de la aplicación en marcha - en tiempo de ejecución - que podría estar interesado en código snipet así:
[DllImport("shell32.dll")]
public static extern IntPtr ExtractIcon(IntPtr hInst, string file, int nIconIndex);
[DllImport("user32.dll", SetLastError = true)]
static extern bool DestroyIcon(IntPtr hIcon);
/// <summary>
/// Sets icon from .exe or .dll into form object
/// </summary>
/// <param name="iIconIndex">Icon index to use.</param>
/// <param name="form">Form to assign to given icon</param>
/// <returns>true if ok, false if failed.</returns>
bool SetIcon(object form, int iIconIndex, String dllOrExe = null)
{
if(dllOrExe == null)
dllOrExe = System.Reflection.Assembly.GetExecutingAssembly().Location;
IntPtr hIcon = ExtractIcon(IntPtr.Zero, dllOrExe, iIconIndex);
if(hIcon == IntPtr.Zero)
return false;
Icon icon = (Icon) Icon.FromHandle(hIcon).Clone();
DestroyIcon(hIcon);
form.GetType().GetProperty("Icon").SetValue(form, icon);
return true;
}
Donde en Form_Load puede colocar llamada como ésta:
SetIcon(this, N);
Donde N = 0 para el primer icono, N = 1 - para el segundo y así sucesivamente.
18.5.2016 Actualización Mi enfoque funciona bien, sin embargo, después de estas propiedades del archivo de ensamblaje, la información de la versión desaparece. Es posible restablecerlo utilizando el típico archivo .rc de C++, pero desafortunadamente para mí rompe los atributos de ensamblaje de alguna manera, el administrador de tareas mostrará su ejecutable como "Aplicación". He intentado cosechar más profundo si es posible alterar de algún modo el título del manifiesto/aplicación, pero sin ningún resultado. Después de eso, terminé usando la solución InsertIcons.exe aquí propuesta.
Así que si no está interesado en la información sobre la versión del archivo (puede usar mi solución, si necesita una versión de archivo y el administrador de tareas debe mostrarla correctamente), utilice InsertIcons.exe. C# code snipet (SetIcon) aquí funcionará para usted en cualquier solución que sea.
resuelto. pero he usado [ResEdit] (http://www.resedit.net/) para crear el archivo rc/res. funciona perfectamente – 0xDEADBEEF
O simplemente implemente una DLL nativa que contenga dichos recursos con la aplicación, para que no tenga que ejecutar herramientas personalizadas o perder información de versiones. –
Este método pierde información de la versión del archivo y, si la restaura de nuevo (por ejemplo, con el archivo .rc de estilo de versión de C++), seguirá teniendo problemas con el administrador de tareas/título de la aplicación incorrecto. (Vea mi propia solución y actualícela al final). ¡Entonces use InsertIcons.exe! ¡No use las herramientas oficiales de Microsoft! :-) – TarmoPikaro