Je consomme ma pile de services à l'aide d'un projet EXE (tâche de démarrage pour l'application Azure) en ce sens que j'ai copié les éléments suivants de la pile de services DLL) & des DLL Azure dans un projet EXE.
Lorsque je construis ce projet EXE, les DLL Azure seront regroupées avec mon EXE, mais la pile de services DLL ne sera pas groupée avec EXE, car pour exécuter mon EXE sur n’importe quel ordinateur, je dois copier toutes les piles de services. DLL manuellement.
J'ai utilisé la DLL de cette pile de services à utiliser
JsonServiceClient client = new JsonServiceClient(servicepath);
Que dois-je faire pour regrouper toutes ces DLL dans mon fichier EXE?
Vous avez plusieurs options:
OR
OR
AssemblyResolve
qui, au moment de l'exécution, lit depuis 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 qui 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 here
Un excellent outil pour inclure les assemblages 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 de en utilisant des ressources incorporées comme méthode de fusion d'assemblys
- Suggestion d'Einar Egilsson tilisation de 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.
Fonctionnalités:
Essayez ILMerge-GUI, la fusion .NET . C'est une interface graphique basée sur Ilmerge
qui évite tout travail en ligne de commande.
Si vous avez des dépendances WPF, vos options seront peut-être plus limitées ..... ILMerge ne semble pas en tenir compte. 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 package).
Il fusionne toutes les DLL marquées "Copier local" = true et génère un fichier .EXE fusionné (à côté de la sortie standard, dont la plupart n'est plus nécessaire), qui est également compressé. Cela peut alors être utilisé seul.
La licence est MIT) afin que vous puissiez modifier/distribuer si nécessaire.
Vérifiez le projet ServiceStack.Gap qui présente plusieurs exemples de procédures ILMerge ServiceStack en une seule plate-forme multiplate-forme . Exe .
ServiceStack comprend également un certain nombre d'autres fonctionnalités particulièrement bien adaptées à la création d'applications intégrées: