web-dev-qa-db-fra.com

Comment fusionner plusieurs assemblages en un seul?

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.

dlls

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?

79
Arun Rana

Vous avez plusieurs options:

OR

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

OR

  • code que vous-même en moins de 10 lignes (changement de code source gratuit mais minimal)
    marque toutes les dépendances nécessaires comme "ressource incorporée" - de cette façon, elles sont incluses dans le fichier EXE ... vous devez configurer un gestionnaire AssemblyResolve qui, au moment de l'exécution, lit depuis Ressources et renvoie les DLL nécessaires au runtime .NET ...
113
Yahia

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

29
yas4891

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:

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

Fonctionnalités:

  • Y compris les symboles de débogage
  • Compression d'assemblages incorporés
  • Inclusion/exclusion d'assemblages spécifiques
  • Autres (voir Readme )
22
CodeFox

Essayez ILMerge-GUI, la fusion .NET . C'est une interface graphique basée sur Ilmerge qui évite tout travail en ligne de commande.

7
Pritam

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.

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

3
rexall

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:

  • Permet à vos services d'être auto-hébergés à l'aide du listener HTTP de .NET
  • Prend en charge les vues Razor pré-compilées
  • Prise en charge des ressources incorporées
  • Prend en charge une base de données intégrée dans Sqlite et OrmLite
  • Peut être ILMergé dans un seul fichier .exe
2
mythz