71 votes

Meilleures pratiques ILMerge

Utilisez-vous ILMerge? Utilisez-vous ILMerge pour fusionner plusieurs assemblys afin de faciliter le déploiement des dll? Avez-vous rencontré des problèmes de déploiement / de version en production après avoir assemblé des assemblages ILMerging?

Je cherche des conseils sur l'utilisation d'ILMerge pour réduire les frictions de déploiement, si cela est possible.

42voto

Lamar Points 3981

J'utilise ILMerge pour la quasi-totalité de mes différentes applications. Je l'ai intégré dans le communiqué processus de construction de sorte que je me retrouve avec un fichier exe par l'application, sans aucun supplément de dll.

Vous ne pouvez pas ILMerge C++ assemblées qui ont en code natif. Vous aussi vous ne pouvez pas ILMerge toutes les assemblées qui contiennent XAML WPF (au moins je n'ai pas eu de succès avec ça). Il se plaint au moment de l'exécution que les ressources ne peuvent pas être situé.

J'ai fait écrire un wrapper exécutable pour ILMerge où je passe dans le démarrage de nom de fichier exe pour le projet que je veux fusionner, et une sortie nom de fichier exe, et puis il reflète les assemblées dépendantes et des appels ILMerge avec les paramètres de ligne de commande. Il est beaucoup plus facile maintenant, quand je ajouter de nouvelles assemblées sur le projet, je n'ai pas à vous rappeler de mettre à jour le script de construction.

41voto

Contango Points 7976

Pour Les Applications De La Console

Voici la base "Post Chaîne de Build" pour Visual Studio 2010 SP1, en utilisant .NET 4.0. Je suis la construction d'une console .exe avec tous les sub-.dll les fichiers inclus.

"$(SolutionDir)ILMerge\ILMerge.exe" /out:"$(TargetDir)$(TargetName).all.exe" "$(TargetDir)$(TargetName).exe" "$(TargetDir)*.dll" /target:exe /targetplatform:v4,C:\Windows\Microsoft.NET\Framework64\v4.0.30319 /wildcards

Conseils basiques

  • La sortie est un fichier "AssemblyName.all.exe" qui regroupe l'ensemble des sous-dll dans un .exe.
  • Notez le "ILMerge\". Vous devez copier le ILMerge utilitaire dans votre solution de répertoire (de sorte que vous pouvez distribuer le code source sans avoir à vous soucier de documentation de l'installation de ILMerge), ou de modifier ce chemin d'accès de l'endroit où se ILMerge.exe réside.

Avancée de conseils:

Si vous avez des problèmes avec elle, pas de travail, activez l'option "Sortie", et sélectionnez "Afficher la sortie de: Construire". Vérifiez que la commande exacte que Visual Studio réellement produit, et voir s'il y avait des erreurs.

Mise à jour

Ce script remplace tous .exe + .les fichiers dll avec un seul combiné .exe. Elle conserve également le débogage .fichier pdb intacte.

Pour l'utiliser, collez-le dans votre "Post-construction" de l'étape, en vertu de la "génération des Événements" onglet dans un projet C#, et assurez-vous d'ajuster le chemin d'accès à la première ligne de point à l' ILMerge.exe:

rem Create a single .exe that combines the root .exe and all subassemblies.
"$(SolutionDir)ILMerge\ILMerge.exe" /out:"$(TargetDir)$(TargetName).all.exe" "$(TargetDir)$(TargetName).exe" "$(TargetDir)*.dll" /target:exe /targetplatform:v4,C:\Windows\Microsoft.NET\Framework64\v4.0.30319 /wildcards
rem Remove all subassemblies.
del *.dll
rem Remove all .pdb files (except the new, combined pdb we just created).
ren "$(TargetDir)$(TargetName).all.pdb" "$(TargetName).all.pdb.temp"
del *.pdb
ren "$(TargetDir)$(TargetName).all.pdb.temp" "$(TargetName).all.pdb"
rem Delete the original, non-combined .exe.
del "$(TargetDir)$(TargetName).exe"
rem Rename the combined .exe and .pdb to the original project name we started with.
ren "$(TargetDir)$(TargetName).all.pdb" "$(TargetName).pdb"
ren "$(TargetDir)$(TargetName).all.exe" "$(TargetName).exe"
exit 0

10voto

Dot Net Pro UK Points 761

Nous utilisons ILMerge sur l'application de Microsoft blocs - au lieu de 12 séparer les fichiers DLL, nous avons un seul fichier que l'on peut télécharger à nos clients, en plus de la structure du système de fichiers est beaucoup plus soignée.

Après la fusion des fichiers, j'ai dû modifier le projet visual studio liste, supprimez le 12 séparée assmeblies et ajouter le fichier unique de référence, sinon, il pourrait se plaindre qu'il n'a pas pu trouver l'assemblée. Je ne suis pas trop sûr de savoir comment ce serait de travailler sur des post-déploiement, cependant, pourrait être utile de donner un essai.

6voto

Mightymuke Points 2276

Je sais que cette question est ancienne, mais nous utilisons non seulement ILMerge pour réduire le nombre de dépendances, mais aussi pour internaliser les dépendances "internes" (par exemple, automapper, restsharp, etc.) utilisées par l’utilitaire. Cela signifie qu'ils sont complètement abstraits et que le projet utilisant l'utilitaire fusionné n'a pas besoin de les connaître. Cela réduit encore une fois les références requises dans le projet et lui permet d’utiliser / mettre à jour sa propre version de la même bibliothèque externe si nécessaire.

3voto

Esteban Araya Points 12496

Nous utilisons ILMerge sur plusieurs projets. La Web Service Software Factory , par exemple, produit environ 8 assemblys en sortie. Nous fusionnons toutes ces DLL dans une seule DLL afin que l'hôte de service n'ait à référencer qu'une seule DLL.

Cela facilite un peu la vie, mais ce n'est pas grave non plus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X