2010-08-14 3 views
5

J'ai essentiellement la même question que cette question: Embed multiple icons in WPF EXEintègre automatiquement plusieurs icônes dans un Executable .NET

My .NET 2.0 application WinForms a actuellement quand vous cliquez sur « Changer d'icône » dans l'explorateur:

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

ce que je voudrais voir, et avec un peu de piratage au sujet comme le suggère l'article ci-dessus je reçois ceci:

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

Toutefois, le processus d'obtention de toutes les informations de version pour l'assembly est perdu. J'ai besoin de conserver les informations de version dans l'assemblage car mon processus de mise à jour automatique repose sur cela pour identifier la version installée de l'application.

Je construis également l'application via un processus d'intégration continu, donc je préfère ne pas avoir d'étapes nécessitant une intervention manuelle, est-ce possible de manière automatisée?

+1

Ne pas ajouter des icônes comme les ressources suffisent? – Joey

+0

L'ajout des icônes en tant que ressource .NET (.resx) ne les rend pas disponibles pour l'Explorateur Windows. –

Répondre

7

Je viens de créer un outil simple pour faire exactement cela sans avoir à jouer avec des fichiers .res. C'est un petit utilitaire que vous pouvez utiliser dans le cadre de votre événement Post-Build et qui vous permet d'ajouter tous les fichiers d'icônes dans un dossier particulier à votre assembly. Si nous supposons que vous avez un icônes dossier sous votre dossier principal du projet, vous pouvez ajouter l'événement après génération suivante:

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

Une autre description et un téléchargement peut être trouvé à http://einaregilsson.com/add-multiple-icons-to-a-dotnet-application/

+1

Sweet. J'apprécie particulièrement que InsertIcons soit open-source et sur [github] (https://github.com/einaregilsson/InsertIcons). – ulatekh

+0

Merci pour l'utilité. Fonctionne comme un charme. – DonBoitnott

2

Cette procédure Code Project article propose une procédure pas à pas.

Fondamentalement, vous ajoutez plus de ressources d'icônes au projet.

+0

Cela semble prometteur, j'irai demain voir si cela fait tout ce dont j'ai besoin. –

+0

Cet article ne résout pas ses problèmes de versionnage, il semble empêcher le manifeste d'être intégré. – insipid

3

L'article mentionné par ChrisF effacera également vos informations de version d'assemblage. Une fois que vous suivez ce guide, vous pouvez essayer d'utiliser la méthode de post-construction décrite ici http://blogs.msdn.com/b/cheller/archive/2006/08/24/718757.aspx pour intégrer le manifeste.

EDIT:

Il est "Méthode n ° 2 - La "" approche (en utilisant des mt.exe)" Générique

+0

Merci d'avoir regardé cela plus en avant pour moi, je vais regarder le guide CodeProject et le blog voir si je peux construire un processus automatisé. –

1

Pour moi, la solution la plus simple à ce problème est de créer un fichier .res, qui inclut uniquement les icônes dont vous avez besoin (et les stocke dans votre ordre préféré), désactive une icône principale dans les propriétés du projet et fusionne le pack d'icônes précédemment préparé (fichier .res) dans votre fichier .exe final, le faisant dans l'événement post-build. Bien que, si ce processus peut être entièrement automatisé et garder vos données de manifeste inchangées, il a besoin d'un outil externe (ResHacker), qui vous permet de faire un fichier .res fusionner le travail via la ligne de commande (bien sûr, Visual Studio peut le faire, mais pour autant que je sache, il n'y a pas d'interface en ligne de commande pour y parvenir - si je me trompe, corrigez-moi s'il vous plaît).

  1. Télécharger un fichier .res vide (http://www.codeproject.com/Tips/160885/How-to-Embed-Multiple-Icons-and-Color-Animated-Cur.aspx) et l'ajouter à votre projet

  2. Remplir fichier .res précédemment ajouté avec vos icônes

  3. Supprimer l'icône principale de votre projet (Project -> Propriétés)

  4. Télécharger un ResHacker outil (http://www.angusj.com/resourcehacker/) et le placer où vous voulez

  5. Ajouter une ligne similaire à votre événement post-construction:

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

C'est tout.Chaque fois que vous compilez votre projet en mode Release, vous obtiendrez les icônes voulues dans votre fichier .exe de destination.

+0

Est-ce que cela conserve le manifeste de l'application? –

+0

Oui, c'est le cas. De plus, l'outil ResHacker vous permet de contrôler des données de ressources entières incluses dans votre fichier .exe, par ex. Au lieu de fusionner un autre fichier .res, vous pouvez simplement ajouter une icône ou la remplacer, comme vous le souhaitez. Notez qu'une caractéristique majeure de cet outil est la facilité d'utilisation de la ligne de commande. –

Questions connexes