Question:
Logiciel pour regrouper les assemblys .NET dans un seul assemblage
allquixotic
2014-02-05 04:16:42 UTC
view on stackexchange narkive permalink

Disons que j'ai un programme .NET / CLR Hello.exe (ou une DLL Hello.dll ) qui dépend de diverses DLL .NET tierces. Je souhaite expédier un seul fichier, sans fournir de véritable «installateur», je recherche donc un logiciel capable de regrouper toutes les dépendances dans l'exécutable, puis de les charger avant que mon code ne commence à s'exécuter.

J'en ai également besoin pour charger inconditionnellement chaque DLL qui est fournie, pas seulement «à la demande», car certains des types dans les DLL sont accessibles via la réflexion et le chargeur de classe n'essaiera donc jamais de charger explicitement la DLL et appelez ainsi le hook de chargeur de classe. Je ne veux pas avoir à ajouter du code à mon exécutable s'il est possible de le faire sans mon propre code.

J'utilise SharpDevelop et .NET Framework 4.0 Full Profile, mais la solution idéale pour ce problème sera indépendant de l'IDE, et fonctionnera avec .NET 3.0 ou version ultérieure (2.0 serait encore mieux, mais ne soyons pas gourmands ...)

Vous pourriez potentiellement regrouper les assemblys dans un seul fichier, puis, lors du chargement de l'application, les jeter dans un répertoire temporaire pour un éventuel chargement, puis utiliser `Assembly.LoadFrom` pour faire le travail réel?
Ces DLL tierces sont-elles gérées ou natives? Avez-vous également besoin d'emballer .NET Framework, c'est-à-dire d'exécuter votre application sans installation de .NET?
Non, je n'ai pas besoin d'exécuter l'application sans le .NET Framework installé. Les DLL tierces sont pour la plupart des assemblys .NET purs, mais certaines sont natives.
Trois réponses:
BatteryBackupUnit
2014-06-19 11:19:05 UTC
view on stackexchange narkive permalink

Et ILMerge? Il existe depuis longtemps et il y a beaucoup de ressources.Par exemple, voici une introduction rapide. De plus, les questions de stackoverflow ont déjà couvert quelques pièges courants, comme Fusionner DLL avec EXE.

Il est également indépendant de votre environnement de construction. Il vous suffit de l'intégrer dans votre processus de construction.

ILMerge n'est malheureusement pas parfait. Par exemple, il ne prend pas en charge la fusion d'assemblys WPF. L'alternative consiste à incorporer les bibliothèques en tant que ressources et à les charger dynamiquement. Par exemple, consultez ce article de blog. Le conteneur LibZ dont allquixotic a mentionné le fait essentiellement.

Pour le conteneur LibZ, il existe une autre alternative, qui a été essayée et j'y réfléchirais sérieusement: Fody.Costura

Mono mkbundle pourrait être encore une autre alternative, veuillez noter cependant qu'il produit du code natif. Les dépendances peuvent être liées statiquement. Sous Windows, il faut également que cygwin puisse fonctionner (voir également ce fil de discussion du forum)

allquixotic
2014-02-05 04:55:11 UTC
view on stackexchange narkive permalink

LibZ Container instrumente votre assemblage principal avec un code qui décompresse les ressources d'assemblage compressées du fichier de ressources et les charge de la mémoire. Il prétend fonctionner avec du code de réflexion ainsi que des noms forts, et il ne modifie en aucun cas les fichiers d'assemblage d'origine, donc les références à nom fort fonctionneront bien.

Pourriez-vous nous en dire un peu plus sur cet outil? Ajouter une expérience personnelle à votre recommandation? Est-ce facile à configurer / utiliser? Peut-être ajouter un exemple?
allquixotic
2014-02-05 04:53:41 UTC
view on stackexchange narkive permalink

il-repack satisfait partiellement les critères de réponse, mais il reconditionne malheureusement les assemblys, ce qui brise leur nom fort, donc si vous dépendez d'assemblys signés avec un nom fort, cela a gagné ne fonctionne pas. Cela ne fonctionne pas non plus avec la plupart du code de réflexion tant que les assemblys n'ont pas été chargés de classe.

Pourriez-vous nous en dire un peu plus sur cet outil? Ajouter une expérience personnelle à votre recommandation? Est-ce facile à configurer / utiliser? Peut-être ajouter un exemple?


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...