Comment fusionner plusieurs assemblages en un seul?

Je consum ma stack de services à l’aide du projet EXE (tâche de démarrage pour l’application azuree) dans la mesure où j’ai copié la DLL suivante de la stack de service et certaines DLL Azure dans un projet EXE.

dlls

Lorsque je génère ce projet EXE, les DLL Azure seront regroupées avec mon fichier EXE, mais la DLL de la stack de services ne sera pas fournie avec EXE, car pour exécuter mon fichier EXE sur un ordinateur, je dois copier manuellement toutes les DLL de la stack de services.

J’ai utilisé la dll de cette stack de service pour l’utiliser

JsonServiceClient client = new JsonServiceClient(servicepath); 

Que dois-je faire pour regrouper toutes ces DLL dans mon EXE?

Vous avez plusieurs options:

  • utiliser ILMerge (gratuit)
    Pour savoir comment voir ici et ici

OU

  • utiliser des outils comme SmartAssembly (commercial)
    il peut intégrer et fusionner entre autres choses (pas besoin de changer votre code source)

OU

  • code que vous-même en moins de 10 lignes (changement de code source gratuit mais minimal)
    marquer toutes les dépendances nécessaires en tant que “ressource incorporée” – de cette façon, elles sont incluses dans le fichier EXE … vous devez configurer un gestionnaire AssemblyResolve qui, lors de l’exécution, lit les ressources et renvoie les DLL nécessaires au runtime .NET …

L’outil que vous recherchez s’appelle ILMerge . C’est un outil en ligne de commande et peut être utilisé comme ceci:

 ilmerge /target:winexe /out:MyApp.exe MyExe.exe ServiceStack.dll ServiceStack.Interfaces.dll ServiceStack.ServiceInterface.dll ServiceStack.Text.dll 

Il existe également un article décrivant comment inclure ILMerge dans la configuration de votre projet VS ici.

Un excellent outil pour inclure des assemblys référencés en tant que ressources incorporées est Costura (un complément Fody ). L’auteur Simon Kropp le décrit comme suit:

[…] une combinaison de deux méthodes:

  • La suggestion de Jeffrey Richter d’ utiliser des ressources incorporées comme méthode de fusion d’assemblages
  • La suggestion d’Einar Egilsson d’ utiliser cecil pour créer des initialiseurs de modules

Le résultat est une solution super simple qui nécessite simplement d’ extraire Costura.Fody de NuGet.

Caractéristiques:

  • Y compris les symboles de débogage
  • Compression d’ensembles incorporés
  • Incluant / excluant des assemblages spécifiques
  • Autres (voir Readme )

Essayez ILMerge-GUI, la fusion .NET . Il s’agit d’un Ilmerge basé sur une interface graphique qui évite tout travail en ligne de commande.

Si vous avez des dépendances WPF, vos options peuvent être plus limitées ….. ILMerge ne semble pas les gérer. Costura.Fody (comme mentionné par Codefox ci-dessus) a parfaitement fonctionné pour nous cependant et a pris environ 5 minutes pour y aller … une très bonne expérience.

Installez avec Nuget (en sélectionnant le projet par défaut correct dans la console du gestionnaire de packages).

Il fusionne toutes les DLL marquées “Copy Local” = true et produit un fichier .EXE fusionné (à côté de la sortie standard, dont la plupart n’est désormais plus nécessaire) qui est également compressé. Cela peut ensuite être utilisé seul.

La licence est MIT afin que vous puissiez modifier / dissortingbuer selon vos besoins.

https://github.com/Fody/Costura/

Vérifiez le projet ServiceStack.Gap qui montre plusieurs exemples de howto ILMerge ServiceStack dans un seul fichier .exe multi-plateforme.

ServiceStack comprend également un certain nombre d’autres fonctionnalités particulièrement bien adaptées à la création d’applications embarquées dans lesquelles:

  • Permet à vos services d’être auto-hébergés à l’aide du programme d’écoute HTTP de .NET
  • Prend en charge les vues de razor pré-compilées
  • Prend en charge les ressources intégrées
  • Prend en charge une firebase database intégrée dans Sqlite et OrmLite
  • Peut être intégré à un seul fichier .exe